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