第6回 値を変化させよう

今回は、変数の中身を変化させることについて話したいと思います。

要旨

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

値の変更

今回はいよいよ弾の発射角をフレーム毎に変化させてみましょう。少し弾幕らしくなってきましたね。このような変化を与えるには、CreateShot01 に定数をそのまま渡したのでは不可能です。前回までのように 90 と書いていたのでは、90 度から発射角を変化させることができませんね。

そこで、変数が活躍します。変数は、前回のように初期化しっぱなしで使う場合もありますが、基本的にはその名の通り途中で値を変更することができます。つまり、発射角の部分を変数にしておいて、フレーム毎にその変数の値を変えて行けばいいわけです。

それでは、実際にやってみましょう。

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

script_enemy_main {
    let imgBoss = "script\img\ExRumia.png";
    let angle   = 90;

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

        LoadGraphic(imgBoss);
        SetTexture(imgBoss);
        SetGraphicRect(0, 0, 63, 63);
    }

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

        CreateShot01(GetX, GetY, 1, angle, WHITE01, 0);
        angle = angle + 10;
    }

    @DrawLoop {
        DrawGraphic(GetX, GetY);
    }

    @Finalize {
        DeleteGraphic(imgBoss);
    }
}

変数 angle を宣言する部分と、CreateShot01 に渡す部分には大きな問題はないと思いますが、念のため復習しておきましょう。先ずは、angle の宣言と初期化です。

let angle = 90;

ここでは angle という変数を宣言し、90 という値で初期化しています。そして、この変数を次のように CreateShot01 に渡しています。

CreateShot01(GetX, GetY, 1, angle, WHITE01, 0);

4番目の所には発射角を指定するのでした。ここに angle と書けば、現在 angle に入っている値が CreateShot01 に渡されます。こうすれば、angle の値が変化すれば、CreateShot01 に渡される値も変わる事になります。

そして、いよいよ変数の値を変更する部分です。

angle = angle + 10;

これは数学的には非常に問題な式です。しかし、この = は数学の = とは意味が違うのです。これは左右が等しいことを意味しているのではなく、右辺の値を左辺の変数に代入することを意味します。つまり、代入前の angle の値に 10 を足した値を、さらに angle に代入します。簡単にいえば、angle の値を 10 だけ増やすわけです。

また、このように値を 10 増やすだけであれば、

angle += 10;

とすることもできます。+= を使えば、変数にある値を足し込む事ができるのです。もちろん、ある値を引く場合には -= を使います。

普通は += 等を使いますが、ある値を掛けてある値を足す...のように2つ以上の操作が必要な場合や、ある値から変数の値を引いた値を変数に再代入する場合などでは、= を使う場合もあります。

まとめると、このスクリプトを実行すれば、フレーム毎に発射角が 10 度変化しつつ、ボスの位置から弾が発射されるわけです。実際に実行して確かめてみて下さい。36 の方向に弾が発射されているはずです。

要旨

次回は条件によって処理を変化させてみましょう。

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

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