我正在使用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键而不是每次按下它?
很抱歉,如果这看起来很愚蠢,已经很晚了,我想不出有什么理由不行。
答案 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();
}
}