- 追加された行はこの色です。
- 削除された行はこの色です。
- 敵を出現させる へ行く。
//@pnavi
[[←前>敵を動かす]] [[次→>自機を破壊する]] [[トップ>シューティングゲームの作成]]
**敵を出現させる [#f55a469f]
***UFOを作る [#r8f16cdd]
この敵はすぐ下に消えてしまうので、次々と新しいオブジェクトを出現させる仕組みを作ります。
ここでは、UFOを作り、UFOから敵があらわれるという設定にします。
[[オブジェクトを作る>オブジェクトを作る]]を参考にUFOのオブジェクトを作成します
&ref(mkufo.png);
キャラクタパターンを設定します。
&ref(mkufop.png);
ダブルクリックして次のように動きを記述します。
//prog
extends SpriteChar;
while(1) {
while(x<$screenWidth) {
x=x+2;
update();
}
while(x>0) {
x=x-2;
update();
}
}
実行させると、UFOが画面を横方向に往復します。
***UFOから敵が出現する [#p101fb51]
さらに、このUFOから敵が出現するようにします。
//prog
extends SpriteChar;
while(1) {
while(x<$screenWidth) {
x=x+2;
if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2)); //追加
update();
}
while(x>0) {
x=x-2;
update();
}
}
追加した部分について解説します。
//progfrac
if (rnd(100)==0) ..
[[rnd>Object.rnd]](100)は、0から99までの整数乱数を返します。その値が0のとき、つまり100分の1の確率でifの後ろが実行されます。
//progfrac
.. appear(new Enemy(x,y,$pat_Sample+2));
これによって、敵クラス(Enemy)のオブジェクトが作成されます。
出現場所はUFOのいる場所、キャラクタパターンは $pat_Sample+2 ()です
([[弾を撃つ>弾を撃つ]]参考)
上の処理では、左から右に移動しているときしか敵が出現しません。
右から左に移動中にもこの処理を挿入する必要があります。
//prog
extends SpriteChar;
while(1) {
while(x<$screenWidth) {
x=x+2;
if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2));
update();
}
//追加
while(x>0) {
x=x-2;
if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2));
update();
}
//追加終わり
}
***メソッドを定義する [#l7f727da]
このプログラムでは敵を出現させるために、全く同じ処理を2箇所に書いたことになります。
これでもプログラムは正しく動くのですが、いくつか不便な点があります。
例えば出現確率を変えたいとか、敵のキャラクタパターンを変えたいとかいったときに、両方書き換える必要があります。
そこで、この敵出現処理をまとめることを行います。
//prog
extends SpriteChar;
//追加
function appearEnemy() {
if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2));
}
//追加おわり
while(1) {
while(x<$screenWidth) {
x=x+2;
appearEnemy(); //変更
update();
}
while(x>0) {
x=x-2;
appearEnemy(); //変更
update();
}
}
まず、一番上に書いた部分について解説します。
//progfrac
function appearEnemy() {
if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2));
}
これは[[メソッド>メソッドの定義]]と呼ばれ、ある処理に名前をつけて何度も使えるようにしたものです。ここでは、1/100の確率で敵を出現させる処理に appearEnemyという名前(メソッド名)をつけています。
この部分は、最初にいきなり実行されるわけではなく、あとからこのメソッドを呼び出すことによって実行されます。
その呼び出しを行うのが、下のほうに書いた
//progfrac
appearEnemy();
です。このように
//plainForm
書式:メソッドの呼び出し
メソッド名();
と書くことで、いつでもメソッドを呼ぶことができます。
試しに、敵の出現確率を1/50に変えてみましょう。それにはappearEnemyの一箇所を書き換えればよいのです。
このようにメソッドを使って、よく使う処理をまとめておくと、後で修正が楽になります。
//prog
extends SpriteChar;
function appearEnemy() {
if (rnd(50)==0) appear(new Enemy(x,y,$pat_Sample+2)); //100を50に
}
while(1) {
while(x<$screenWidth) {
x=x+2;
appearEnemy();
update();
}
while(x>0) {
x=x-2;
appearEnemy();
update();
}
}
//@pnavi
[[←前>敵を動かす]] [[次→>自機を破壊する]] [[トップ>シューティングゲームの作成]]