【问题标题】: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 之后。

    如果其他人有任何其他建议,我仍然很乐意听到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多