2012-10-17 61 views
0

我正在重新開發我正在開發的遊戲,並已成功將其轉換爲使用備忘單轉換爲XNA 4.0。其中大部分有效,其中一部分不起作用,而且我正在修復不起作用的過程。從3.1轉換到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

我想也許你的問題在別處。您看到的紫色是未初始化的緩衝區的默認顏色。如果您有渲染目標問題,通常會出現這種情況。也許[這個答案](http://gamedev.stackexchange.com/a/40127/288)可能會有所幫助。 –

回答

0

你認爲GraphicsDevice.Clear()在狀態改變爲暫停後調用了某種方式嗎? DrawPaused()方法在你的代碼中做了什麼?

+0

GraphicsDevice.Clear()永遠不會在我的代碼中被調用。 DrawPaused簡單地調用spritebatch.drawstring 5次(4創建一個黑色邊框) – user961794

+0

那麼爲什麼不畫出遊戲和所有與它相關的精靈,除了首先繪製,然後允許在遊戲之後調用DrawPaused()方法已經吸引了自己的背景。只要防止遊戲循環的更新呼叫,以便它基本上看起來「暫停」,但仍然會在遊戲暫停時的位置呈現角色,等級,敵人等等。這與你正在嘗試做什麼衝突嗎? –

+0

排序,那麼我就不會像現在那樣使用遊戲狀態。目前,您剛剛提到的所有內容都位於「PlayingGameState」類中。目前,我有一個「PausedGameState」類。我可以擺脫這一點,並將暫停功能移動到玩遊戲狀態類,但是我可以想象,當我添加更多使用像暫停遊戲狀態(菜單,地圖等等)功能的狀態時,會有點難看。 ) – user961794