今回は、変数の中身を変化させることについて話したいと思います。
+=
などの演算子で変数の中の値を変化できます。それではいってみましょう。
今回はいよいよ弾の発射角をフレーム毎に変化させてみましょう。少し弾幕らしくなってきましたね。このような変化を与えるには、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 の方向に弾が発射されているはずです。
+=
などの演算子で変数の中の値を変化できます。次回は条件によって処理を変化させてみましょう。