2012-04-20 3 views
0

私はミサイル専用のクラスを追加しました。コードを以下に示します。侵入者の襲撃を取得する

class Missile 
    { 
     Vector2 Position; 

     public Missile(int XInitialPos, int YInitialPos) 
     { 
      Position = new Vector2(XInitialPos, YInitialPos); 
     } 

     public void Move() 
     { 
      Position.Y = Position.Y - 8; 
     } 
     public void MoveMissile() 
     { 
      Position.Y = Position.Y + 8; 
     } 

     public Vector2 GetPosition() 
     { 
      return Position; 
     } 

}

を私はランチャーの撮影をするためにmoveメソッドを呼び出す方法を知っている、しかし、私は侵略者を撮影するためにとして、ランダムに何かを起動する方法がわかりません。どんな助けもありがとう。ありがとうございました。

code which invokes launcher to shoot in the update method: 
if (MissileFired != null && MissileFired.GetPosition().Y < 20) MissileFired = null; 

      if (Keyboard.GetState().IsKeyDown(Keys.Space) && MissileFired == null) 
      { 
       MissileFired = new Missile(LauncherXPos, 650); 
      } 

答えて

2

ShouldShootMissileという名前のメソッドをインベーダーに追加できます。おそらくゲーム時間をパラメータ(おそらくdoubleまたはXNA GameTimeオブジェクト)として表現する必要があります。この関数はboolを返します。

それで、この情報を使用して、侵略者がさまざまな要因に基づいてミサイルを発射する資格があるかどうかを判断できます。これらの要因は、おそらく最大発射可能な速度(500msごとに1回)とその後変動(250ms)を示す一定の要因になります。標準乱数ジェネレータを使用してコンピュータに変動性を与え、これらの条件に応じて真または偽のいずれかを返すことができます。

たぶん、このような何か:

Random rand = new Random(); 
    double lastMissileFired = 0d; 

    private bool ShouldFireMissile(double time) 
    { 
     double fixedDelay = 500d; 
     double firingProbability = 0.1d 

     if (time - lastMissileFired < fixedDelay) 
      return false; 

     if (rand.NextDouble() > firingProbability) 
      return false; 

     lastMissileFired = time; 
     return true; 
    } 

警告、上記のコードは、おそらくそれで問題のトンを持っており、ほぼ確実にきれいにあなたのプログラムに適合しませんが、うまくいけば、それはあなたに何を私の鮮明な画像を提供します意味した。私は、250msの可変遅延を、それが発火する確率に変えることにしました。

あなたが侵入者

if (invader.ShouldFireMissile()) 
    invader.FireMissile(); 
+0

ねえ、お返事に感謝の更新ごとに上記のコードを実行します。私はサンプルコードを提供することができますか?ありがとう。 – user1275084

+0

通常、 'invader'オブジェクトは、発射物自体ではなく、ミサイルをいつファイルするのかを決定するものです。 – Thomas

関連する問題