2014-12-09 2 views
0

그래서 XNA에서 Space Invaders 복제를 만들고 있습니다. 침입자 배열을 만들고 운동 논리를 추가했습니다. 총알을 쏘게하고 싶습니다. 그래서 나는 그것에 대한 튜토리얼을 따라 왔고 필요한 코드 만 사용했습니다. 그러나 여전히 총알은 화면에 그려지지 않습니다.XNA - 목록에 항목을 추가하고 그림을 그립니다.

class botInvaders 
{ 

    public botInvaders(Texture2D newBulletTex) 
    { 
     bulletsList = new List<blasterLasers>(); 
     bulletTex = newBulletTex; 
     botInvadersHealth = 5; 
     currentDificultyLevel = 1; 
     bulletDelay = 40; 
     isVisible = true; 
    } 

    public static Texture2D botInvaderTex, bulletTex; 
    public static Rectangle botInvaderHitBox; 
    public static Vector2 botInvaderOrigin; 
    public int botInvaderCurrentFrame = 1, botInvaderFrameWidth = 52, botInvaderFrameHeight = 90, bulletDelay, botInvadersHealth, currentDificultyLevel, invaderRows = 3, invaderCollumns = 10; // invaderRows = 5 // For 50 invaders 
    public static Rectangle[,] botInvadersRect; 
    public bool isVisible; 
    public List<blasterLasers> bulletsList; 

    public void LoadContent(ContentManager Content) 
    { 
     botInvaderTex = Content.Load<Texture2D>(".\\gameGraphics\\gameSprites\\botInvaders\\normalInvaders\\invaderShip1"); 
     bulletTex = Content.Load<Texture2D>(".\\gameGraphics\\gameSprites\\botInvaders\\normalInvaders\\botInvaderLaser"); 
     botInvadersRect = new Rectangle[invaderRows, invaderCollumns]; 
    } 

    public void Update(GameTime gameTime) 
    { 
     for (int r = 0; r < invaderRows; r++) 
     { 
      for (int c = 0; c < invaderCollumns; c++) 
      { 
       EnemyShoot(); 
       UpdateBullets(); 
      } 
     } 
    } 

    public void Draw(Texture2D invadersTex, Rectangle[,] invadersDestinationRect, Nullable<Rectangle> invadersSourceRect, Color invadersColor, float invadersRotation, Vector2 invadersOrigin, SpriteEffects invadersEffects, float invadersScale, SpriteBatch spriteBatch) 
    { 
     for (int r = 0; r < invaderRows; r++) 
     { 
      for (int c = 0; c < invaderCollumns; c++) 
      { 
       spriteBatch.Draw(botInvaderTex, botInvadersRect[r, c], botInvaderHitBox, Color.White); 
       foreach (blasterLasers bulletSpawn in bulletsList) 
       { 
        bulletSpawn.Draw(spriteBatch); 
       } 
      } 
     } 
    } 

    public void UpdateBullets() 
    { 
     foreach (blasterLasers bulletsSpawn in bulletsList) 
     { 
      bulletsSpawn.bulletPos.Y = bulletsSpawn.bulletPos.Y + bulletsSpawn.bulletSpeed; 
      if (bulletsSpawn.bulletPos.Y >= -632) 
      { 
       bulletsSpawn.isVisible = false; 
      } 
     } 

     for (int i = 0; i < bulletsList.Count(); i++) 
     { 
      if (!bulletsList[i].isVisible) 
      { 
       bulletsList.RemoveAt(i); 
       i--; 
      } 
     } 
    } 

    public void EnemyShoot() 
    { 
     if (bulletDelay >= 0) 
     { 
      bulletDelay--; 
     } 

     if (bulletDelay <= 0) 
     { 
      blasterLasers newBullet = new blasterLasers(bulletTex); 
      newBullet.bulletPos = new Vector2(botInvaderHitBox.X + botInvaderFrameWidth/2 - newBullet.bulletTex.Width/2, botInvaderHitBox.Y + 90); 
      newBullet.isVisible = true; 
      if (bulletsList.Count() < 20) 
      { 
       bulletsList.Add(newBullet); 
      } 
     } 

     if (bulletDelay == 0) 
     { 
      bulletDelay = 40; 
     } 
    } 
} 

내가 GAME1에서 클래스를 초기화 :

// Create a var 
botInvaders botInvader; 
// Init it 
botInvader = new botInvaders(botInvaders.bulletTex); 
// Load Content 
botInvader.LoadContent(Content); 
// Update 
botInvader.Update(gameTime); 
// Draw Invaders 
botInvader.Draw(botInvaders.botInvaderTex, botInvaders.botInvadersRect, botInvaders.botInvaderHitBox, Color.White, 0f, botInvaders.botInvaderOrigin, SpriteEffects.None, 1.0f, spriteBatch); 

이 문제는 내가 실제로 그리기 아니에요 수 있을까 여기 내 침입자 클래스는, 난 그것에서 질문에 관련이없는 것을 제거 총알? 아니면 목록에 글 머리 기호를 추가하지 않습니까? 나는 내가 볼 수있는 디버깅 경우

bulletsList Count = 0 
_size 0 
_items [0] null [1] null [2] null [3] null 

편집 :

blasterLasers 클래스 : 당신이 UpdateBullets를 호출 할 때 당신은 그래서 당신은 갈 때, bulletslist에서 총알을 제거하는 것 같습니다

public class blasterLasers 
{ 
    public Texture2D bulletTex; 
    public Vector2 bulletOrigin, bulletPos; 
    public bool isVisible; 
    public float bulletSpeed; 
    public Rectangle boundingBox; 

    public blasterLasers(Texture2D newBulletTex) 
    { 
     bulletSpeed = 10f; 
     bulletTex = newBulletTex; 
     isVisible = false; 
    } 

    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(bulletTex, bulletPos, Color.White); 
    } 
} 

답변

0

Draw 그리기, 그것은 비어있는 bulletList를 통해 반복되므로 아무 것도 그려지지 않습니다.

+0

동의합니다. 제거 조건은 Y> = -632이며, 항상 * true * 일 수 있습니다. – BradleyDotNET

+0

동의하지만, blasterLasers에 대한 자세한 내용은 알기가 어렵습니다. 몇 가지 중단 점을 넣고이 문제인지 확인하는 것이 좋습니다. –

+0

blasterLasers 클래스도 게시하려고합니다. – PowerUser

관련 문제