所以目前我正在尝试开发一个2D游戏,其中我有不同的大小的对象。为了性能,我决定使用统一的网格进行碰撞。
我知道对于每个对象,我们将它们存储在网格的相应单元格中以检查碰撞。但是由于我们的对象不是一个点,而实际上是一个矩形,因此在某些情况下(例如当对象与多个单元格重叠时(,我们需要将对象存储在多个单元格中。
当我尝试使用链表实现此数据结构时,会出现问题。对于包含对象链接列表的统一网格数组,每个对象都包含一对指向同一单元格中的上一个和下一个对象的指针。这意味着,如果我在单元格 1 中有对象 A、B、C,如果对象 B 重叠,我就不能使它位于多个单元格中,因为对象 B 已经指向单元格 1 中的对象 A 和 C,并且它不能再指向单元格 2 中的任何其他对象。
一个简单的解决方案就是使用向量或数组,但是有更好的解决方案吗?
使用元素包装器,如下所示:
class Wrapper {
public:
Object *obj;
Wrapper *next, *prev;
}
然后将Wrapper
存储在网格中而不是Object
中。