0

我正在重新开始开发我正在开发的游戏,并已使用备忘单成功地将其转换为 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”出现在清除的紫色屏幕上。

4

1 回答 1

0

您是否认为 GraphicsDevice.Clear() 在状态更改为暂停后以某种方式被调用?DrawPaused() 方法在您的代码中做了什么?

于 2012-10-17T17:34:11.323 回答