第3回 Hello, enemy!

前回の続きで、今回はとりあえず敵を表示してみましょう。

要旨

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

敵の設定

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

敵を作るのに最低限必要な情報は、「表示位置」「体力」「当たり判定」です。さて、一体どこで指定すればいいのでしょうか? 前回言った話では、script_enemy_main で敵の動作を記述すると言いました。ただ、script_enemy_main の後の { } の中に直接書くわけではなく、@Initialize@MainLoop というのを書き、その後の { } の中に書きます。

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

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

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

@Initialize に書かれた文は、スクリプトを実行する一番最初に実行されます。詳しい文法に関してはここでは省きますが、SetX は敵の x 座標を、SetY は敵の y 座標を、SetLife は敵の体力を指定するものです。ここでは x 座標は画面中心(GetCenterX)に、y 座標は一番上(GetClipMinY)から 120 ピクセル下に設定しています。

@MainLoop に書かれた文は、毎フレーム毎フレーム実行されます。当たり判定は毎フレーム毎に指定します。SetCollisionASetCollisionB には、それぞれ敵と弾、敵と自機の当たり判定を指定します。当たり判定は、中心位置と半径を使って指定します。ここでは当たり判定の中心を、敵の現在位置(GetX, GetY)にしています。普通これ以外を設定することはないでしょう。

では、実行してみましょう。...と、ここで気づく事があると思います。実行してみると、一見、敵がいないように見えます。ところが、弾を撃ってみると、一見何もない空間に弾が当たって、敵の体力が減っていくと思います。要するに、ここまでには敵のグラフィックを表示する部分が足りなかったわけです。

敵の表示

敵を表示するには、DrawGraphic というものを使って次のようにします。

#東方弾幕風
#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);
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

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

色々と新しいものが増えました。先ず、グラフィックを描画する処理は @DrawLoop というところに書きます。グラフィックを描画するには、DrawGraphic というものを使います。DrawGraphicには、グラフィックの描画位置を渡します。描画するグラフィックの中心が、指定した描画位置にくるように描画されます。

しかし、これだけではグラフィックを描画するには足りません。どんなグラフィックを描画するかが必要ですね。これには、SetTexture というものを使います。SetTexture には、th_dnh.exe の置いてあるフォルダからの相対パス(ファイルの位置)を使って、グラフィックファイルを指定します。ここではサンプルスクリプトで使われている Ex ルーミアの画像 "script\img\ExRumia.png" を使っています。

パスの様に文字が沢山連なったものを文字列といいます。文字列は数値と違って直接書く事はできず、" " で囲んで書きます。但し、#Title のような # が先頭につく命令においては、例外的に " " を書きません。

そして、描画するグラフィックを指定するには SetTexture を使うだけでは不十分です。そのグラフィックの中で、どの部分を表示するかも指定する必要があります。それが SetGraphicRect です。表示する領域(長方形)の左、上、右、下の座標を指定します。

これでキャラを表示できるかと思いきや、まだこれだけでは表示されません。SetTexture で表示されるグラフィックは、事前に読み込んでおく必要があるのです。SetTexture はあくまでも読み込んだグラフィックのどれを使うか、を指定するものであり、SetTexture はグラフィックを読み込まないのです。その読み込みという作業を行わなければ、グラフィックを表示することができないのです。

その読み込みには、LoadGrahpic というものを使います。これは何度も実行する必要がないので、@Initialize で使います。また、@Finalize には敵を倒した後に実行される処理を書きますが、ここで DeleteGraphic を使うことも推奨されています。このことに関する詳しい話については、ここでは割愛します。とりあえずそういうもんだと思って下さい。

では、以上のスクリプトを実行してみましょう。無事 Ex ルーミアが表示されたと思います。そして、ちゃんと Ex ルーミアに弾が当たって、ダメージを与える事ができると思います。

要旨

次回はいよいよ弾を表示してみましょう。

第2回 | 第4回 | 目次へ戻る

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