生成没有交集的随机平台

时间:2010-03-18 16:01:16

标签: c# xna

如何在没有交叉的情况下生成随机平台?我认为垃圾收集和所有检查可能都是一个问题。我有生成的瓦片部分,但不是交叉检查。

3 个答案:

答案 0 :(得分:1)

有关需要移除对象的信息,请参阅vaguely similar question I asked。 GC是我XNA存在的祸根。这很慢。它可以在击中时产生明显的滞后。所以我个人的建议是不要尝试好的垃圾收集,而是尽量避免垃圾收集。

如果您的平台是对象,请尝试使引用保持活动状态。如果平台关闭,屏幕不会删除它,只需重复使用即可。当需要新平台时,将其重新定位在另一侧。最初只需创建一些可以使用和重用的平台。

答案 1 :(得分:1)

你的瓷砖(这些是可以交叉的东西?)如何描述?有许多标准方法可以检查交叉对象,如果它们是轴对齐的框,那么它就很简单了。

boxes_intersect = ((a.min.x < b.max.x) && (a.max.x > b.min.x)) &&
                  ((a.min.y < b.max.y) && (a.max.y > b.min.y)) &&
                  ... for as many axes as you have

答案 2 :(得分:0)

这些最简单的解决方案是随机放置一块瓷砖,然后检查它是否与任何其他放置的瓷砖碰撞。如果是的话,那就试试再放一次。如果在N次尝试后无法放置图块,则停止尝试。

显然这是一个O(n ^ 2)解决方案,但您可以使用简单的分而治之的方法来降低复杂性。放置图块时,只需将位置记录在某种位置相关或网格化的映射数据结构中,此后放置的图块可以只检查它们被放入的数据结构以查看是否存在任何冲突,并且如果存在任何冲突则可能更新它添加。