2011-04-08 37 views
0

我目前正在研究涉及地形變形的蠕蟲遊戲。我曾經用.GetData,修改顏色數組,然後使用.SetData,但我考慮改變它,使工作在GPU上完成(使用RenderTargets)。XNA 2D沒有GetData的變形地形碰撞檢測()

一切都很順利,但我進入了另一個問題。我對地形的整個碰撞檢測是基於代表地形的顏色數組,但我沒有這個顏色數組了。每次修改地形來更新我的Color數組時,我都可以使用.GetData,但這會破壞我最初更改的目的。

我會好的一點是在開始時使用GetData一次,然後根據我稍後通過其他方式對地形所做的更改修改該數組。我不知道我會怎麼做,但任何人都可以幫忙嗎?

回答

0

我已經做了一些研究,並且我還沒有找到一個解決方案來擺脫任何GetData調用,每次我的地形被修改時,但我已經找到了「優化」它的方法,或者至少減少儘可能GetData調用。

  • 隕石坑繪圖分批,這意味着不是繪製每一個,因爲它的創建,我將它們添加到列表,並畫出所有的人每隔幾幀。這可以減少GetData調用的數量 - 每批陷阱一個,而不是每個陷阱一個。

  • 在將渲染目標繪製到渲染目標後,我在調用GetData之前等待幾幀,以確保GPU已經處理了所有繪圖命令。這最大限度地減少了管道堵塞。

  • 如果我有一個掛起的GetData調用使得更多的隕石坑進入,隕石坑將保持批處理,直到GetData調用完成。換句話說,繪圖和獲取是同步的,因此在繪製一批隕石坑之後,GetData調用總是發生幾幀,並且任何新的隕石坑繪製請求都會等待,直到發生未決的GetData。

如果其他人有任何其他的建議,我仍然會很高興聽到他們。