このWikiは古くなりました:新しいWikiへ移動


//@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
[[←前>敵を動かす]]  [[次→>自機を破壊する]]  [[トップ>シューティングゲームの作成]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS