2014-03-01 57 views
2

隨着我的研究遍佈世界各地,我們應該只使用每個實例一個精靈。但是如果我在控制遊戲的類(調用不同的屏幕等)中將sprite批量設置爲靜態,該怎麼辦?靜態sprite批處理?

當我嘗試過這樣的工作就像魅力,但是這是一個很好的做法或將來可能會導致一些問題。那麼如果可以做到,我還可以分享舞臺和形狀渲染器嗎?

記:爲什麼我試圖去與「靜態一批技術」的主要原因是Java崩潰當我嘗試部署階段,精靈批量或形狀渲染

+1

使這種靜態似乎不是正確的方法。而不是嘗試傳遞spritebatch分享 –

+0

感謝評論。好想法! – raco

回答

1

我這樣做的,以及和到目前爲止,我沒有遇到任何問題。

您需要注意SpriteBatch.begin()SpriteBatch.end()調用,因爲您可能永遠不知道它已經啓動的位置,以及共享時停止的位置。

同樣適用於Camera/ProjectionMatrix。如果您正在使用着色器,也可用於當前使用的ShaderProgram

請確保您始終完全知道您的所在位置SpriteBatch否則您可能會在一天內面臨奇怪的錯誤。

Stage不應該被共享,因爲它可能用於不同的目的。對於不同的UI,僅使用一個Stage沒有任何意義。

ShapeRenderer可以共享,因爲它的作用類似SpriteBatch,但可能你只想在一個地方使用它。

dispose()實際上應該沒有任何問題。您必須確保以正確的順序處理所有內容,以免最終遺漏任何內容並導致異常。

+0

好吧,那很棒。 對於我在哪裏使用我的批次,將不會有任何問題,因爲它一次只能使用一次。我將批處理傳遞給需要渲染的對象,這樣我就可以將所有東西都放在同一個地方 非常感謝評論 – raco

1

作爲@noone已經表示,不應該導致任何問題,如果你照顧。 但我只想指出另一件事:在某些Screen s(MenuScreenOptionScreen,...)中,您可能會使用Scene2dUi來處理某些UI。因此,您將使用Stage s,它們屬於Screen並且不共享。所以在這種情況下,您應該記住,每個Stage都有自己的SpriteBatchCamera。所以它可能是,你只需要在 GameScreen附加SpriteBatch。如果是這種情況,我不會讓它變成靜態的,只有在GameScreen。 由於沒有人說dispose()應該工作,如果您使用正確的順序,所以也與更多然後1 SpriteBatch應該不會造成任何問題。 所以我認爲這兩種方式都可以工作,而且是很好的方法。這取決於您的設計以及您想要如何/在哪裏使用SpriteBatche s和Camera s。

+0

謝謝。我不知道舞臺。 – raco

+0

沒問題。祝你好運! – Springrbua