シューティングゲームの館

今日 昨日


25. 水平方向撒き散らしショット。


このショットはこのようなショットです。



先に発射した弾はXの負の方向に速く、中間に発射した弾はX座標そのままで、後に発射した弾はXの正の方向に速く飛んできます。

実行したときに聞こえると思いますが、これは全部等間隔で発射しています。

これは7カウントごとに発射しています。

このショットのアルゴリズムは、

カウントが7の倍数になった時、

 ・ 発射フラグをたてて

 ・ 敵の座標をショットの初期座標に代入します。

 ・ atan2関数をもちいて、プレイヤーと敵とのy、x座標からどの方向にいるかラジアンを求めます。

 ・ 斜辺 * cosでx座標が、斜辺 * sinでy座標が求まります。斜辺はPATTERN1SPEEDでしたね。この値を座標に増やします。

 ・ 最後、増加させるx、yの値が決まった後、先に発射した弾は遅く、後に発射した弾は早くさせるため、
    それぞれの値を増減させます。※1

※1:X座標は先に発射したものは負の方向へ足し、段々数値を正の方向にずらし、後に発射したものは正の方向へ足します。

jは0〜20の値であり、(j-10)によって10を中央にして、負と正にわけられます。

この事をプログラムで書くとこうなります。

このアルゴリズムをプログラムでかくとこうなります。以前と同じ部分は注釈を書きません。

void EnemyShotPattern5(int i){
        for(int j=0;j<21;j++){//計21発
                if(EnemyShot[i].counter==7*j){//7の倍数の時
                        EnemyShot[i].EnemyShots[j].flag=1;
                        EnemyShot[i].EnemyShots[j].x=EnemyShot[i].mem_ex;
                        EnemyShot[i].EnemyShots[j].y=EnemyShot[i].mem_ey;
                        EnemyShot[i].Angle[j] = atan2(EnemyShot[i].mem_py-EnemyShot[i].mem_ey,EnemyShot[i].mem_px-EnemyShot[i].mem_ex);
                        StopSoundMem(sound_enemy_shot[0]);
                        PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK);
                }
                EnemyShot[i].EnemyShots[j].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[j])+(double)(j-10)/4.0f;//10を中心に正負にわけて増加
                EnemyShot[i].EnemyShots[j].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[j]);
        }
}

戻る                                  次へ
メニューへ戻る


トップページへ

DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi Yamada.