第5回

prev slash top slash next

第5回:変数

変数

変数とは、数値などを入れておく箱のようなものです。
real, char, booleanまたそれらの配列が使えます。
realは数値です。
charは文字です。charの配列が文字列です。
booleanは真偽値です。

 1, 2, 3, 4…real型
 true, false…boolean型
 "a","あ","abc"…char型

変数を使用するに当たって、注意が必要です。変数を使うにははじめに宣言しないといけません。
変数の宣言は[let]を使います。
なお、型は宣言したときに自動で判別されます。
変数の宣言をせずに変数を使用した場合、スクリプト開始時にエラーメッセージが出ます。

 let a; 変数「a」を宣言
 let a = 32; 変数「a」を宣言(real型)して、32で初期化
 let b = "文字列"; 変数「b」を宣言(char型)して、"文字列"で初期化
 let c = true; 変数「c」を宣言(boolean型)して、trueで初期化

変数を使う際には注意が必要です。
それは、変数はその変数を宣言した文の後から、その文を含む{}の終わりまでしか使えない、
ということです。
変数の有効範囲のことをスコープといい、有効期間の事を寿命といいます。


変数を使う

変数は同じ値を何度も使いまわせます。それを利用して前回までのプログラムを改良しましょう。

#東方弾幕風
#Title[変数]
#Text[変数]
#ScriptVersion[2]
script_enemy_main
{
 let imgBoss = "script\img\ExRumia.png";
 @Initialize{
  SetX(GetCenterX);
  SetY(GetClipMinY+120);
  SetLife(2000);
  LoadGraphic(imgBoss);
  SetTexture(imgBoss);
  SetGraphicRect(0, 0, 63, 63);
 }
 〜省略〜
 @Finalize
 {
  DeleteGraphic(imgBoss);
 }
}

こう書くと、変更があったときに変数を初期化する部分1つを変更するだけで、全て変えることが出来ます。
変数を使わない場合、変更した際に
「いくつも変えるの面倒」,「1つだけ変え忘れた」,「スペルミスった」
といったことがなくなります。

変数の再代入

さて次は変数の中身を変更してみましょう。
前回作ったスクリプトでは、弾の発射角を90と書いていました。
ここで変数を使ってみましょう。

一部省略
script_enemy_main
{
 let angle = 90;
 @MainLoop{
  SetCollisionA(GetX, GetY, 24);
  SetCollisionB(GetX, GetY, 24);
  CreateShot01(GetX, GetY, 2, angle, BLUE01, 10);
  angle = angle+10;
  yield;
 }
}

変数の宣言と初期化については問題ないでしょう。
しかし、[angle = angle+10]とは何でしょうか。

実は、プログラムにおいての「=」は左辺と右辺が等しいという意味でなく、
左辺に右辺の値を代入するという意味なのです。
つまりこの式は、代入前のangleに10を足したものを左辺のangleに代入するという処理を行っているのです。 簡単に言えばangleの値を10ずつ増やしていくということです。

こう書くことも出来ます。

 [angle+=10]

この場合は10を足していますが、

 [angle-=10]

と書けば、10ずつ引くこともできます。
スクリプトを実行すれば、1フレームごとに角度が10度ずつ変化して、結果36の方向に弾が撃たれるようになります。

次回は、毎フレーム連続で発射されている弾の発射間隔を変えていってみましょう。


top
prev slash next
inserted by FC2 system