可切换的暂停屏幕 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();
}
}
我正在使用 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();
}
}