2016-04-11 13 views
0

侵入者が消えるので、私のコードの弾丸が侵略者を射撃しているようです。しかし、タンクから弾丸が出て侵略者に当たることはありません。私は弾丸がどこに行ったかわからない。C#XNAスペースインベーダー。タンクの弾丸が表示されない

弾丸のための初期化コード:

recBullet = new Rectangle(); 
isRight = true; 
isShotFired = false; 
isBulletOut = false; 
isBulletAlive = true; 

アップデートコード:

KeyboardState keys = Keyboard.GetState(); 
if ((keys.IsKeyDown(Keys.Space) == true || oldState.IsKeyUp(Keys.Space) == false)) 
     { 
      recBullet.X = recTank.X + recTank.Width/2; 
      recBullet.Y = screenHeight; 
      isShotFired = true; 
      isBulletAlive = true; 
     }if (isShotFired) 
     { 
      recBullet.Y -= 10; 
     } 
     if (recBullet.Y <= 0) 
     { 
      isShotFired = false; 
     } 
     for (int x = 0; x < numberOfXInvaders; x++) 
     { 
      for (int y = 0; y < numberofYInvaders; y++) 
      { 
       if (isBulletAlive) 
       { 
        if (recBullet.Intersects(recInvader[x, y])) 
        { 
         if (!isInvaderDead[x, y]) 
         { 
          isInvaderDead[x, y] = true; 
          isBulletAlive = false; 
         } 

        } 
       } 
      } 
     } 
oldState = keys; 

ドローコード:

if (isBulletAlive) 
     { 
      spriteBatch.Draw(texBullet, recBullet, Color.Green); 
     } 

私はこれを取得することができます任意の助けに感謝!ありがとう。

+0

はあなたのtextBulletのためのあなたの資産を正しくロードされていることを確認した場合。また、spriteBatch.Drawを呼び出すメソッドを表示できますか? (オーバーライド描画から呼び出さない場合) –

+0

描画されている可能性もありますが、背景(その他のもの)は箇条書きの上に表示され、UI上で気付かない可能性があります。 –

+0

もう一つの可能​​性は、弾丸が動きすぎて見ることができないことです。 'recBullet.Y - = 10;'ステートメントでより低い値を試すことができます。更新コードが毎回呼び出されると、vsyncをオンにして600px /秒で移動します。オフの場合はずっと速くなります。 – Tone

答えて

1

次の手順で行います:あなたの弾丸の画像が

  • 適切にロードされている場合

    1. に最初のチェックは、すべての画像の上に描画するようにしてください。それをDrawメソッドの最後の部分に置きます。
    2. まだ存在しない場合は、すべてのspriteBatch.Drawをコメントアウトし、箇条書きのままにしてください。それがあれば、抽選であなたのロジックをチェックしてみてください。一部の画像が重なっている場合があります。
    3. 2と3が失敗した手順は、手順1
  • 関連する問題