XNA,产卵导弹

时间:2013-11-08 15:01:43

标签: c# xna

我遇到XNA Game Studio的问题。我不知道为什么这个代码不起作用,如何产生导弹?我在这里尝试做的是每次按下空间时产生导弹。

protected override void Update(GameTime gameTime)
{
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
        this.Exit();
    keys = Keyboard.GetState();
    if (keys.IsKeyDown(Keys.Up))
    {
        spaceshipRectangle.Y -= 5;
    }
    if (keys.IsKeyDown(Keys.Down))
    {
        spaceshipRectangle.Y += 5;
    }
    if(keys.IsKeyDown(Keys.Space))
    {
        missileShot = true;
        missile = Content.Load<Texture2D>("Missile");
        missileRectangle = new Rectangle(spaceshipRectangle.X, spaceshipRectangle.Y, 30, 40);
        spriteBatch.Begin();
        spriteBatch.Draw(missile, missileRectangle, Color.Green);
        spriteBatch.End();
    }
    if (missileShot = true)
    {
        missileRectangle.X += 5;
    }
    // TODO: Add your update logic here
    enemyRectangle.X -= 5;
    base.Update(gameTime);
}

谢谢。

3 个答案:

答案 0 :(得分:4)

从我的记忆中,XNA有一个Draw()方法或类似的方法,与Update()分开?然后你把所有的绘图放在那个方法中。

编辑:试试这个:

 protected override void Draw(GameTime gameTime)
 {
     spriteBatch.Begin();
     //draw all your stuff
     spriteBatch.End();
}

答案 1 :(得分:2)

这里出现的关键问题是,每次按下空间时都会覆盖missilemissileRectangle,而不是添加新的导弹 - 看起来你需要一个导弹列表。另一个问题是你散布输入处理代码,更新代码和绘图代码 - 你想要的是处理你的输入,在适当的时候将新的导弹添加到列表中,然后在(a)你的更新代码中遍历列表,移动它们,以及(b)渲染代码,以绘制它们。

答案 2 :(得分:0)

您不应该从Load()方法中加载东西。 在Load()方法中加载纹理。

尝试将此行移至Load()方法。

missile = Content.Load<Texture2D>("Missile");

同时单独更新和绘制代码。