sNieQW1EJqEFhAT7SDFs2l9kvcXofsKtocRseov9df81r3m2nF59e8v784jw5kfdr 敵を出現させる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; <font color="ee1111"> if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2));</font> 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(); } <font color="ee1111"> while(x>0) { x=x-2; if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2)); update(); }</font> } メソッドを定義するこのプログラムでは敵を出現させるために、全く同じ処理を2箇所に書いたことになります。 これでもプログラムは正しく動くのですが、いくつか不便な点があります。 例えば出現確率を変えたいとか、敵のキャラクタパターンを変えたいとかいったときに、両方書き換える必要があります。 そこで、この敵出現処理をまとめることを行います。 extends SpriteChar; <font color="ee1111"> function appearEnemy() { if (rnd(100)==0) appear(new Enemy(x,y,$pat_Sample+2)); }</font> while(1) { while(x<$screenWidth) { x=x+2; <font color="ee1111"> appearEnemy();</font> update(); } while(x>0) { x=x-2; <font color="ee1111"> appearEnemy();</font> 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(<font color="ee1111"> 50</font> )==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(); } } |