我正在重新开发我正在开发的游戏,并使用备忘单成功将其转换为XNA 4.0。大多数都有效,有些则没有,我正在修复不起作用的过程。
我所拥有的一件事是一个很大程度上基于状态系统的状态系统,该系统被用作电子书XNA Unleashed的一个例子。我没有太多内容......基本上只是暂停游戏的能力。
当我暂停游戏时,游戏的动作将停止,并且屏幕上会出现一个单词“PAUSED”,并且您会看到暂停的动作。但是,现在似乎精灵批处理会自动清除帧之间的所有内容,所以当我暂停游戏时,屏幕会清除,将PAUSED留在紫色背景上。那时候,我相信添加“SaveStateMode.SaveState”可以防止这种情况发生,但该功能已被删除。当我进行一些研究时,我发现它已被删除,因为它基本上是无用的,这一切都在游戏状态管理器中处理。
但是,我找不到任何关于此的文档。我应该从哪里开始?现在,我的代码看起来像这样:
在玩游戏状态更新方法中:
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”,并显示游戏玩法停止的位置的快照...而不是在已清除的紫色屏幕上“暂停”。
答案 0 :(得分:0)
你认为在状态改为暂停后以某种方式调用了GraphicsDevice.Clear()吗? DrawPaused()方法在您的代码中做了什么?