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

Toggleable pause screen XNA 4.0 C#

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

我想让它 start off paused 然后,在按下 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;

paused 是一个布尔值,pauseScreen 都是布尔值,它们都用于触发 pause/unpause 游戏和 display/hide 我正在使用的后挡板的 if 语句。那些都工作得很好,就是上面的那一点给我带来了麻烦。

知道为什么它只记录一次 P 键而不是每次按下都记录吗?

抱歉,如果这看起来很愚蠢,已经晚了,我想不出任何不起作用的原因。

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();
    }
}