0

所以目前我正在尝试开发一个 2D 游戏,其中我有不同大小的不同对象。为了性能,我决定对碰撞使用统一的网格。

我知道对于每个对象,我们将它们存储在网格的相应单元格中以检查碰撞。但是由于我们的对象不是一个点,而是一个矩形,所以在某些情况下(比如对象与多个单元格重叠时),我们需要将对象存储在多个单元格中。

当我尝试使用链表实现此数据结构时,就会出现问题。对于包含对象链表的统一网格数组,每个对象都包含一对指向同一单元格内的前一个和下一个对象的指针。这意味着如果我在单元格 1 中有对象 A、B、C,如果对象 B 重叠,我不能使对象 B 在多个单元格中,因为对象 B 已经指向单元格 1 中的对象 A 和 C,它可以'不再指向单元格 2 中的任何其他对象。

一个简单的解决方案就是使用向量或数组,但有更好的解决方案吗?

4

1 回答 1

0

使用元素包装器,如下所示:

class Wrapper {
public:
  Object *obj;
  Wrapper *next, *prev;
}

然后存储Wrapper在网格中而不是Object.

于 2020-01-30T06:47:30.780 回答