我正在重新开始开发我正在开发的游戏,并已使用备忘单成功地将其转换为 XNA 4.0。大部分有效,有些无效,我正在修复无效的部分。
我拥有的一件事是一个状态系统,它在很大程度上基于用作 XNA Unleashed 电子书示例的状态系统。我没有太多东西......基本上只是暂停游戏的能力。
当我暂停游戏时,游戏的动作会停止,“PAUSED”一词会以大写字母出现在屏幕上,你会看到暂停的动作。但是,现在看来精灵批处理会自动清除帧之间的所有内容,因此当我现在暂停游戏时,屏幕会清除,将 PAUSED 留在紫色背景上。那时,我相信添加“SaveStateMode.SaveState”会阻止这种情况发生,但该功能已被删除。当我做一些研究时,我发现它被删除了,因为它本质上是无用的,这一切都在游戏状态管理器中处理。
但是,我找不到任何关于此的文档。我应该从哪里开始?现在,我的代码如下所示:
在 Playing Game State 更新方法中:
if (input.WasPressed(0, Buttons.Start, Keys.Enter))
{
GameManager.PushState((GameState)ThisGame.PausedGameState.Value);
}
public void PushState(GameState newState)
{
AddState(newState);
//Let everyone know we just changed states
if (OnStateChange != null)
{
OnStateChange(this, null);
}
}
private void AddState(GameState state)
{
states.Push(state);
Game.Components.Add(state);
//Register the event for this state
OnStateChange += state.StateChanged;
}
//PausedGameState Draw method:
public override void Draw(GameTime gameTime)
{
ThisGame.SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null);
DrawPaused(); //draws the Paused Text
ThisGame.SpriteBatch.End();
}
目标是让“PAUSED”出现在屏幕上,并带有游戏停止位置的快照……而不是“PAUSED”出现在清除的紫色屏幕上。