2012-10-30 167 views
2

我正在XNA游戏中工作,当我开始游戏时,弹出一个菜单。如果你按“空格”,游戏本身就会开始。我正在使用具有三种不同情况的游戏状态切换器来执行此操作。虽然当我达到最后状态(游戏画面)并且想要通过按“空格”重新开始游戏时,除非您按住“空格键”,否则它无法正常工作。XNA 2D游戏状态,重新启动游戏

所以基本上。游戏从菜单屏幕开始。如果你按下空格,游戏本身就会开始。如果你碰到任何东西并死亡,你会进入游戏画面。我想要它,以便您可以返回到游戏运行,如果你按空间,这是行不通的(除非你按住空间,并保持这种方式)

PS:我愿意添加更多的代码,如果需要的话,只是要求而已。提前致谢!

这里是我的更新代码:

const int introMenu = 0, gameRunning = 1, gameOver = 2; 
switch (gameState) 
     { 
      case introMenu: 
      if (ks.IsKeyDown(Keys.Space)) 
      { 
      gameState = gameRunning; 
      } 
       break; 
      case gameRunning: 
       if(colliding) 
       { 
         gameState = gameOver; 
       } 
       break; 
      case gameOver: 
       if (ks.IsKeyDown(Keys.Space)) 
       { 
        gameState = gameRunning;  //NOT WORKING! 
       } 
       break; 
     } 

这里是我的抽奖代码:

 GraphicsDevice.Clear(Color.CornflowerBlue); 

     spriteBatch.Begin(); 
      switch (gameState) 
     { 
     case introMenu: 
     background.Draw(spriteBatch); 
     break; 
      case gameRunning: 
       //draw the player, new background and everything nessecary 
       break; 
      case gameOver: 
       //draw new gameover background 
       break; 
     } 
     spriteBatch.End(); 

     base.Draw(gameTime); 

回答

4

现在我没有足够的拿出一个确切的答案,但如果我是猜测,你的colliding条件仍然是真实的,而游戏状态只是回归。

正如我在我的评论中所说的那样,您可以使用调试器来检查是否确实是这种情况。

我也希望你能重新初始化游戏变量恢复到原来的状态,所以当你重新开始游戏,就好像你开始它的第一次(并确保碰撞是不正确的)

+0

这是95%的事情不能正确重新启动的原因。确保每次“重新启动”程序时重置所有变量。为了消除任何可能的错误,我建议将它们重置为初始化它们的任何东西,以便下一次通过游戏时将它看作是全新的 –

+0

是的,现在我注意到了。碰撞仍然是真实的,船一次又一次地碰撞。我将它设置为false并重置所有变量并查看它将如何工作。谢谢。 – user1775668

+0

虽然,我有一个问题。我应该手动重置变量还是有更简单的方法来重新初始化它们? – user1775668

2

上面的答案和评论完全正确。为了解决这个问题个别问题,只是改变你的代码如下:

if(colliding) 
{ 
    colliding = false; 
    gameState = gameOver; 
} 

,因为当你按下是这款游戏的游戏状态切换到运行后按空格键,然后立即返回到游戏结束画面的问题正在发生因为碰撞仍然是真的

+1

如果你这样做,确保无论是什么原因导致'colliding'设置为'true',不会立即将其设置为'true',否则目标丢失 –

+0

好点。虽然我想象它是基于某些对象之间的某些碰撞检测而设置的,这些碰撞检测有望在游戏状态更改时重置。 –