2011-04-08 33 views
0

我目前正在研究涉及地形变形的蠕虫游戏。我曾经用.GetData,修改颜色数组,然后使用.SetData,但我考虑改变它,使工作在GPU上完成(使用RenderTargets)。XNA 2D没有GetData的变形地形碰撞检测()

一切都很顺利,但我进入了另一个问题。我对地形的整个碰撞检测是基于代表地形的颜色数组,但我没有这个颜色数组了。每次修改地形来更新我的Color数组时,我都可以使用.GetData,但这会破坏我最初更改的目的。

我会好的一点是在开始时使用GetData一次,然后根据我稍后通过其他方式对地形所做的更改修改该数组。我不知道我会怎么做,但任何人都可以帮忙吗?

回答

0

我已经做了一些研究,并且我还没有找到一个解决方案来摆脱任何GetData调用,每次我的地形被修改时,但我已经找到了“优化”它的方法,或者至少减少尽可能GetData调用。

  • 陨石坑绘图分批,这意味着不是绘制每一个,因为它的创建,我将它们添加到列表,并画出所有的人每隔几帧。这可以减少GetData调用的数量 - 每批陷阱一个,而不是每个陷阱一个。

  • 在将渲染目标绘制到渲染目标后,我在调用GetData之前等待几帧,以确保GPU已经处理了所有绘图命令。这最大限度地减少了管道堵塞。

  • 如果我有一个挂起的GetData调用使得更多的陨石坑进入,陨石坑将保持批处理,直到GetData调用完成。换句话说,绘图和获取是同步的,因此在绘制一批陨石坑之后,GetData调用总是发生几帧,并且任何新的陨石坑绘制请求都会等待,直到发生未决的GetData。

如果其他人有任何其他的建议,我仍然会很高兴听到他们。