2

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

2 回答 2

4

现在我没有足够的数据来给出一个确切的答案,但如果我猜的话,你的colliding条件仍然是正确的,并且游戏状态只是回到了原点。

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

我还希望您将游戏变量重新初始化为其原始状态,因此当您重新开始游戏时,就好像您是第一次开始游戏一样(并确保碰撞不是真的)

于 2012-10-30T19:58:34.760 回答
2

上面的答案和评论是完全正确的。要解决这个单独的问题,只需按如下方式更改您的代码:

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

问题正在发生,因为当您在游戏结束后按下空格键时,游戏状态切换到正在运行,然后立即回到游戏结束屏幕,因为碰撞仍然是真实的

于 2012-10-30T20:07:12.547 回答