STG的基本常識
April 21, 2009 in Game, Magical Broom Shooting!, Programming
以下是一些製作STG的分享
事實上是方便自己之後查看
子彈移動
x += Cos( angle) * (speed) ;
y += Sin( angle) * (speed) ;
數學是彈幕STG的核心 這是最基本的
計算子彈0.03秒後 (60FPS的情況) 的x-axis的方法是先 Cos 子彈的移動角度 之後再乘子彈的速度 把結果加到子彈本身的x-axis 那就是子彈新的x-axis
y-axis同樣 但注意這裡angle要用Sin
自機狙
NORMALIZE_ANGLE ( Atan( tx – x,ty – y) );
要計算一粒子彈向那方向移動才會擊中玩家 就必須用數式計算其角度
C++ 提供了一個叫 atan 的FUNCTION
不用自己打大量程式來計算角度
上面的tx , ty 是玩家的座標 | x,y 是子彈發射口的座標
物件之間的距離
dx = x2 – x;
dy = y2 – y;
distance = sqrt ((dx*dx) + (dy*dy));
基本的數學 不用解釋吧?
移動物件到指定位置
dir = Atan(tx-x,ty-y);
x+= Cos(dir)*(distance/delay);
y+= Sin(dir)*(distance/delay);
有時看到一些STG BOSS走到其他位置 移動方法是加速之後慢慢減速 (例如TH系列的Boss)
delay是物件要多久才到達指定位置 越大越久
N WAY 彈
bnumber = 36;
angleoffset = 360/bnumber;
for (int loop=0;loop<bnumber;loop++) ShootBullet(pBullet[i].x,pBullet[i].y,GET_ANGLE(angleoffset*loop),5.0);
bnumber 是N Way的N ..例如 120就120Way了..
物件之間判定 (2個4邊形)
bool HitBox(Sint32 x1,Sint32 y1,Sint32 w1,Sint32 w1b,Sint32 x2,Sint32 y2,Sint32 w2,Sint32 w2b,Sint32 r,Sint32 g,Sint32 b){
Sint32 left1=x1-w1;
Sint32 right1=x1+w1;
Sint32 top1=y1-w1b;
Sint32 bottom1=y1+w1b;
Sint32 left2=x2-w2;
Sint32 right2=x2+w2;
Sint32 top2=y2-w2b;
Sint32 bottom2=y2+w2b;
if(left1 >= right2) return false;
if(right1 <= left2) return false;
if(bottom1 <= top2) return false;
if(top1 >= bottom2) return false;
return true;
}
如果2個4邊重疊了 return ture;
else return false;
2 Comments
Leave a Reply











學校的CIT課程應該要教人造STG!
yue的教學較其它網上的容易明白多了…
測完驗後就開始造一個xx8+1的stg…