0

我对 XNA 游戏工作室有疑问。我不知道为什么这段代码不起作用,如何产生导弹?我在这里尝试做的是在每次按下空间时产生一枚导弹。

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);
}

谢谢你。

4

3 回答 3

4

根据我的记忆,XNA 有一种Draw()方法或类似的方法,它与Update()? 你把你所有的画都放在那个方法里。

编辑:试试这个:

 protected override void Draw(GameTime gameTime)
 {
     spriteBatch.Begin();
     //draw all your stuff
     spriteBatch.End();
}
于 2013-11-08T15:06:23.177 回答
2

这里出现问题的关键是您不断覆盖missile并且missileRectangle每次按下空格,而不是添加新导弹 - 看起来您需要一个导弹列表。另一个问题是您正在散布输入处理代码、更新代码和绘图代码 - 您想要处理您的输入,根据需要将新导弹添加到列表中,然后在 (a) 您的更新代码中循环遍历列表,移动它们,以及 (b) 你的渲染代码,来绘制它们。

于 2013-11-08T15:07:30.117 回答
0

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

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

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

还将您的更新和绘制代码分开。

于 2013-11-09T21:23:28.977 回答