我遇到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);
}
谢谢。
答案 0 :(得分:4)
从我的记忆中,XNA有一个Draw()
方法或类似的方法,与Update()
分开?然后你把所有的绘图放在那个方法中。
编辑:试试这个:
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
//draw all your stuff
spriteBatch.End();
}
答案 1 :(得分:2)
这里出现的关键问题是,每次按下空间时都会覆盖missile
和missileRectangle
,而不是添加新的导弹 - 看起来你需要一个导弹列表。另一个问题是你散布输入处理代码,更新代码和绘图代码 - 你想要的是处理你的输入,在适当的时候将新的导弹添加到列表中,然后在(a)你的更新代码中遍历列表,移动它们,以及(b)渲染代码,以绘制它们。
答案 2 :(得分:0)
您不应该从Load()方法中加载东西。 在Load()方法中加载纹理。
尝试将此行移至Load()方法。
missile = Content.Load<Texture2D>("Missile");
同时单独更新和绘制代码。