可切换的暂停屏幕XNA 4.0 C#

时间:2015-05-07 04:30:13

标签: c# visual-studio-2010 xna

我正在使用XNA 4.0框架在C#中制作一个简单的游戏,但是在实现暂停功能时遇到了问题。

我希望开始关闭暂停,然后点击 P 取消暂停并开始玩游戏,然后在按下 P 的任何时候,再次暂停。到目前为止,它开始暂停并切换到播放,但一旦开始播放就不会暂停。这是我按下 P

时暂停的代码
    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
        {
            this.Exit();
        }

        KeyboardState newState = Keyboard.GetState();

        // Is P key down?
        if (newState.IsKeyDown(Keys.P))
        {
            // If P key is down now but not down last update and game isn't paused; pause
            if (!oldState.IsKeyDown(Keys.P) && !paused)
            {
                // Pausing the game
                paused = true;
                pauseScreen = true;
            }
            // If P key is down now but not last update and game is pause; unpause
            if (!oldState.IsKeyDown(Keys.P) && paused)
            {
                // Unpausing
                paused = false;
                pauseScreen = false;
            }
        }
        oldState = newState;

暂停是一个布尔值,因为pauseScreen都用于触发if暂停/取消暂停游戏并显示/隐藏我正在使用的后挡板的语句。那些工作得非常好,这有点让我烦恼。

任何想法为什么它只记录一次按P键而不是每次按下它?

很抱歉,如果这看起来很愚蠢,已经很晚了,我想不出有什么理由不行。

1 个答案:

答案 0 :(得分:1)

bool isPause;
bool isPauseKeyDownHandled;

bool isPauseKeyDown = ...;
if (isPauseKeyDown)
{
    if (!isPauseKeyDownHandled)
    {
        isPause = !isPause;
        isPauseKeyDownHandled = true;
    }
}
else
{
    isPauseKeyDownHandled = false;
}

或使用this

CustomKeyInputManager keyInputManager;

Initialize()
{
    keyInputManager = CustomKeyInputManager();
    keyInputManager.RegisterKey("pause", Keys.P);
}

Update(GameTime pGameTime)
{
    keyInputManager.Update(pGameTime);  
    if (keyInputManager["pause"].IsPressedAndNotHandled)
    {
        pause != pause;
        keyInputManager["pause"].SetHandled();
    }
}