从3.1转换为4.0 ...游戏状态

时间:2012-10-17 17:28:17

标签: xna-4.0

我正在重新开发我正在开发的游戏,并使用备忘单成功将其转换为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”,并显示游戏玩法停止的位置的快照...而不是在已清除的紫色屏幕上“暂停”。

1 个答案:

答案 0 :(得分:0)

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