XNA 2D Gamestate,重启游戏

时间:2012-10-30 19:47:22

标签: c# xna switch-statement

我正在开发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);

2 个答案:

答案 0 :(得分:4)

现在我没有足够的答案给出确切答案,但如果我猜测,你的colliding条件仍然存在,而游戏状态就会回归。

正如我在评论中所说,您可以使用调试器来检查是否确实如此。

我还希望你将游戏变量重新初始化回原来的状态,所以当你重新开始游戏时,就好像你是第一次启动它一样(并确保碰撞不是真的)

答案 1 :(得分:2)

上面的答案和评论是完全正确的。要解决这个问题,只需更改代码,如下所示:

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

问题正在发生,因为当你在游戏状态下的游戏切换到跑步后按下空格键,然后立即通过屏幕回到游戏,因为碰撞仍然是真的