我正在开发XNA游戏,当我开始游戏时会弹出一个菜单。如果按“空格”,游戏本身就会启动。我正在使用具有三种不同情况的游戏状态切换来执行此操作。虽然当我到达最后一个状态(游戏画面)并希望通过按“空格”重新开始游戏时,除非你按住“空格”,否则它无法正常工作。
所以基本上。游戏以菜单屏幕开始。如果按空格键,游戏本身就会启动。如果你碰到任何东西而死,你就会进入游戏画面。我想要它,以便你可以回到游戏运行,如果你按空格,这是行不通的(除非你按住空格并保持这种方式)
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);
答案 0 :(得分:4)
现在我没有足够的答案给出确切答案,但如果我猜测,你的colliding
条件仍然存在,而游戏状态就会回归。
正如我在评论中所说,您可以使用调试器来检查是否确实如此。
我还希望你将游戏变量重新初始化回原来的状态,所以当你重新开始游戏时,就好像你是第一次启动它一样(并确保碰撞不是真的)
答案 1 :(得分:2)
上面的答案和评论是完全正确的。要解决这个问题,只需更改代码,如下所示:
if(colliding)
{
colliding = false;
gameState = gameOver;
}
问题正在发生,因为当你在游戏状态下的游戏切换到跑步后按下空格键,然后立即通过屏幕回到游戏,因为碰撞仍然是真的