第4回 Hello, bullets!

いよいよ今回は敵が弾を撃つようにしてみたいと思います。

要旨

それではいってみましょう。

弾の発射

シューティングゲームに必要な要素である「敵」と「弾」のうち、今回は「弾」を作ってみましょう。

弾を発射するのに最低限必要な情報は、「発射位置」「速度」「発射角度」「弾の種類」、そして「発射のタイミング」です。このような簡単な弾を発射するには、CreateShot01 というものを使います。

では、弾を発射する処理はどこに書けば良いのでしょうか? @Initialize に書いてしまうと最初の1回しか発射されないので、通常は @MainLoop 内に書く事になると思います。では、実際にやってみましょう。

#東方弾幕風
#Title[テストスクリプト]
#Text[テストスクリプト]
#ScriptVersion[2]

script_enemy_main {
    @Initialize {
        SetX(GetCenterX);
        SetY(GetClipMinY + 120);
        SetLife(2000);

        LoadGraphic("script\img\ExRumia.png");
        SetTexture("script\img\ExRumia.png");
        SetGraphicRect(0, 0, 63, 63);
    }

    @MainLoop {
        SetCollisionA(GetX, GetY, 24);
        SetCollisionB(GetX, GetY, 24);

        CreateShot01(GetX, GetY, 1, 90, WHITE01, 0);
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic("script\img\ExRumia.png");
    }
}

CreateShot01 には、発射位置の x, y 座標、速度、発射角、弾の種類、そして、遅延フレーム数を指定します。発射位置の x, y 座標は、そのままの意味です。速度は、1フレームあたりに進む距離(ピクセル単位)です。

発射角は、弾を発射する方向で、角度と方向は図 1 のように対応しています。例えば右は 0 度で、下は 90 度です。当然のことながら、これらの値に 360 の倍数を足したり引いたりしても構いません。-90 度と 270 度は同じものですが、180 度を越えるとイメージが湧きにくいので、±180 度で表現するのがいいかと思います。

図 1. 角度と方向
図 1. 角度と方向

弾の種類には、弾の色と形を表す番号を組み合わせたモノを指定します。色には赤(RED)、橙(ORANGE)、黄(YELLOW)、緑(GREEN)、水色(AQUA)、青(BLUE)、紫(PURPLE)、白(WHITE)があります。弾の形を表す番号は表 1 のようになっています。

表 1. 弾の形
01
02
03
04
05
11
12
21
22
23
31
32

遅延フレーム数は、CreateShot01 してから実際に弾が発射されるまでにかかるフレーム数です。今回は 0 を指定してるので、即座に弾が発射されます。

多少分からないところがあったかもしれませんが、今はとにかくこれで弾が発射されるということだけ分かってもらえればいいです。色々分かってきてから、またここを読むといいかと思います。

ところが、実際に実行してみると、これでは1つ問題が起きる事が分かります。毎フレーム毎フレーム弾が発射され、高密度で絶え間なく弾が発射されてしまうのです。これを防ぐには、数フレーム毎に弾を発射するといった工夫が必要になります。ただ、これを行うためにはまだ色々な知識が必要になってくるので、次の回から順を追って解説していきたいと思います。

要旨

次回からは、今回のテストスクリプトを改造しながら、文法的な話をしていきます。

第3回 | 第5回 | 目次へ戻る

この講座はロベールが作成しました。
inserted by FC2 system