敵弾迫る!@シューティング

おはようございますです。

今日の実装機能は3点。

  1. 移動スピード変更機能。
  2. 敵が弾を撃つ!
  3. 敵が弾を持続して撃つモード切替(?)的な機能

最初の移動スピードは簡単ですね。
敵の自律制御スクリプト

SPD         6;

とか書くと、移動速度が変更されます。デフォルトでは2なので、6だとかなり速くなります。


うん、描画、データ、スクリプト実行 が分かれているので、作りやすい。
けど。プロからしたらまだまだ全然破滅的なんだろうなーと思いながら書いています。


次に、敵の弾を撃つ機能です。いろいろ考えましたが、結果的には簡単でした

  • 描画プログラムに敵弾描画処理を追加。
  • スクリプト実行されると、敵弾データを生成して描画対象になる配列に投入。

そういうコツ?わかってきました。

SHOT        1;

1=通常弾 を撃ちます。


そして、敵が弾を打ち続けるモードを追加。
まず、Enemy構造体に撃った時間、弾の種類、間隔、モードを追加。
っと、すんごい肥大化してる。。。と思いつつ進行。

SHOTMODE    1,100;

って書くと、それ以降、敵は 1=通常弾 を100ms間隔で撃ち続けます。

SHOTMODE    0;

って書くと、撃つのをやめます。
以下は打ち続けるモード、弾の発射間隔の判定ロジックです。
clock()で時間をとりながら、(前撃った時間+間隔時間)を過ぎると発射するしくみです。

//弾打ちモード
if(enemies[i].shot_mode == MODE_SHOT){
    time_t next_shottime = enemies[i].shoot_time + (time_t)enemies[i].shot_interval;
    time_t now = clock();
    if(next_shottime <= now){
        
        EnemyBullet bullet = CreateEnemyBullet(BULLET_NOMAL,enemies[i].pos.x,enemies[i].pos.y);
        PlaceEnemyBullet(bullet);
        enemies[i].shoot_time = now;
    }
}

ぎゃああああああああいっぱい撃ってきたよおおおおおおおおおおおお

はい。毎度ですが、ログで埋まっていて、みにくくてすんません。


その他、敵弾移動処理、敵弾生成関数、書きました。
描画対象配列に投入する機能を分離

今日はそんなかんじです。

明日はついに。当たり判定に入ろうかと思います。
やっとシューティングっぽくなってきますね。