【问题标题】:XNA 2D Deformed Terrain Collision Detection without GetData()没有 GetData() 的 XNA 2D 变形地形碰撞检测
【发布时间】:2011-04-09 12:49:21
【问题描述】:
我目前正在开发一款涉及地形变形的蠕虫游戏。我曾经使用 .GetData 来修改颜色数组,然后使用 .SetData,但我考虑更改它以在 GPU 上完成工作(使用 RenderTargets)。
一切顺利,但我遇到了另一个问题。我对地形的整个碰撞检测是基于表示地形的颜色数组,但我不再有那个颜色数组了。每次修改地形时,我都可以使用 .GetData 来更新我的颜色数组,但这会破坏我最初更改的目的。
我可以在开始时使用一次 GetData,然后根据我稍后通过其他方式对地形所做的更改来修改该数组。我不知道我会怎么做,有人可以帮忙吗?
【问题讨论】:
标签:
arrays
xna
collision-detection
【解决方案1】:
我已经做了一些研究,但我还没有找到解决方案来摆脱每次修改地形时的任何 GetData 调用,但我找到了“优化”它的方法,或者至少减少了尽可能多地调用 GetData。
火山口绘制是批量绘制的,这意味着我不会在创建时绘制每个火山口,而是将它们添加到列表中并每隔几帧绘制一次。这减少了 GetData 调用的数量——每批陨石坑一个,而不是每个陨石坑一个。
在将陨石坑绘制到渲染目标后,我在调用 GetData 之前等待几帧,以确保 GPU 已处理所有绘图命令。这可以最大限度地减少管道停顿。
如果我有一个待处理的 GetData 调用,并且有更多的陨石坑进入,陨石坑将保持批处理,直到 GetData 调用完成。换句话说,绘制和获取是同步的,因此 GetData 调用总是在绘制一批陨石坑后几帧发生,并且任何新的陨石坑绘制请求都会等到待处理的 GetData 之后。
如果其他人有任何其他建议,我仍然很乐意听到。