如何正确处理 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后即可处理
我开始在 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后即可处理