2017-06-15 41 views

回答

4

不,begin()end()dispose方法有很大不同。

按照documentation

你說得對有關dispose方法的行爲。

發佈此對象的所有資源。

begin()end()用於設置渲染相關的Batch,請注意,你可以有多個批次繪製。所有的批次調用必須在beginend方法之間完成。他們與釋放記憶無關,所以如果你想這樣做,你需要做dispose()

+0

我想我會問你同樣的問題,我問sorifiend:如果我不打電話給dispose(),以前的抽獎信息是否會增加? –

+0

在這裏所有的好答案,認爲你的問題得到解答。但是,如果你仍然有點不太常用,只需查看SpriteBatch的dispose()方法的代碼即可。儘管begin()和end()被一遍又一遍地用於渲染,但是dispose()會擺脫內部SpriteBatch用於渲染的內容(需要釋放的內部 - 網格和可能的Shader),一旦你不再需要用於渲染的SpriteBatch:@Override public void dispose(){mesh.dispose(); if(ownsShader && shader!= null)shader.dispose(); } –

2

SpriteBatch.end()飾面關閉渲染。啓用深度寫入,禁用混合和紋理。

SpriteBatch.dispose()實際釋放該對象的所有資源,並防止內存泄漏。

因此,使用SpriteBatch.end()後,該項目可能會因你的代碼的其他方面保存在內存中,特別是如果你想稍後再重新使用它。所以在完成SpriteBatch的時候應該總是調用dispose,否則不能保證內存將被釋放。

+0

因此,如果我不調用'dispose()',以前繪製的信息是否會增加? –

+0

如果你重複使用相同的SpriteBatch,那麼它不會建立起來。但是如果你每次創建一個新的,那麼它可以建立起來。 – sorifiend

3

你肯定是不要想要處理它的每一幀或每end後。它不會建立起來。一旦你完成了批次的使用,你想要處置它(這很可能是關閉應用程序或更改Screen時)

1

一次性資源需要處置,但是在哪裏?

  1. 如果您建立SpriteBatchcreate()ApplicationListener方法,並使用它在不同的屏幕上的遊戲,處理他們ApplicationListener的dispose()方法。

  2. 不然,如果你在屏幕的show()方法生成並接着在屏幕的dispose()方法處理,但處理方法不ApplicationListener或框架調用,所以你需要調用自己處理方法,以便調用從屏幕的hide()方法處置方法。

begin()end()方法是使用來實現的SpriteBatch的目的:

要批量多精靈成一個單一的繪製調用,以便最小化每個繪製調用的相關聯的性能損失。

相關問題