2011-09-25 24 views
0

我正在開發基於2D的遊戲。我已將事物分解爲諸如skybackground,landbackground,城鎮,UI等組件,並且每個組件都處理其繪圖。在調用任何繪製調用之前,使用默認值I spritebatch.Begin(),以便在1批次中繪製所有內容。什麼是平鋪紋理的更經濟的方法?

爲了繪製地塊,我反覆在整個地區繪製一個方形的土地紋理,直到我填滿它。然而,有一個名爲linear wrapspriteBatch模式就是這樣做的。不利的一面是,我將不得不改變我的設計,將我的全球產品spritebatch.begin()多次拆分爲每個組件。

所以我的問題是什麼更好/更經濟,手動平鋪紋理或拆分子組件之間的begin()end()

還有其他問題可能需要我拆分一個spriteBatch.Begin(),那麼多1個額外的spriteBatch.Begin()有多重要?還是10個?還是100多?我想知道在什麼規模下我應該開始擔心增加更多begins()

+0

3次讀過這個問題,我不明白超過1個spritebatch可以提供多大的幫助。在xna中,您應該繪製從您的繪圖中調用的繪圖或方法的所有內容。這導致你總是可以將批處理作爲引用發送到需要的地方,所以你爲什麼想要多於一個。有些代碼可以幫助我們獲得一種方法來將開始/精靈的數量減少到一個。 – Olle89

回答

1

最好的解決方案是在GPU上而不是CPU上發生儘可能多的工作(例如利用平鋪等),並儘可能少地使用SpriteBatch.Begin()調用...

這聽起來像是這裏的最佳解決方案並不符合任何一個極端。

爲什麼不只是有兩個SpriteBatches和用於你的土地和其他一切?

例如重新設計的解決方案,以便:

  • 兩個SpriteBatches被傳遞到每一個組件,讓組件決定使用哪一個? ...或...

  • 每個組件都有一個屬性,指示它需要哪個SpriteBatch,並在繪製時傳遞適當的SpriteBatch?

對於每個SpriteBatch.Begin()的影響,這真的取決於你的特定遊戲(和需要發生,以完成以前spriteBatch,並開始下一個工作的量),所以我會建議持續測試和監控性能是確定何時應該關心的最佳方式。

+0

感謝您的答案,我從來不知道我可以有超過1個spritebatch。 – TrueGrime