如何正确处理 box2d 形状?

How to dispose box2d shapes properly?

我开始在 Libgdx 中使用 Box2d 创建我的世界,我必须为不同的游戏对象创建形状。我读过的教程说我应该在使用完形状后处理它们。

所以,我开始保留这样的参考资料:

private CircleShape circle;
private PolygonShape ground;
private PolygonShape wall;
private PolygonShape box;

//...

//(getters)

然后像这样处理我的对象:

@Override
public void dispose()
{
    circle.dispose();
    ground.dispose();
    wall.dispose();
    box.dispose();
    world.dispose();
}

我决定将其更改为扩展列表,但问题出在我的代码中的其他地方,我在单击时添加了主体,因此我需要允许从外部访问某些形状 classes .我可以创建额外的形状并允许访问我的列表,但我不喜欢创建一个巨大的一次性对象列表的想法。

一种解决方案是创建一个具有内部形状列表的 ShapeManager 对象。我可以处理这个对象,它会包装形状构造函数,让我 return 一个已经存在的形状,如果它符合需要的话。

但是,这个解决方案似乎太重了。为什么 Box2d(或 LibGDX)制作了需要处理的形状对象?是否有 class 像我描述的那样已经包含在 LibGDX 中?有更好的解决方案吗?

定义好body后即可处理