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;

STG的基本常識

2 Comments

    1. Nameless says:

      學校的CIT課程應該要教人造STG!

    2. O says:

      yue的教學較其它網上的容易明白多了…
      測完驗後就開始造一個xx8+1的stg…

Leave a Reply

STG的基本常識

0 Trackbacks