【发布时间】:2015-10-07 20:56:58
【问题描述】:
背景
我正在开发一个游戏(使用 LibGDX)并且最近了解了实体组件系统。我决定使用 LibGDX 附带的 ECS,Ashley。但是,这可能适用于将 Box2D 与任何实体组件系统一起使用。
问题
创建 Box2D 主体并附加形状相对复杂。这是一个基本的例子:
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(0, 0);
Body body = world.createBody(bodyDef);
CircleShape shape = new CircleShape();
shape.setRadius(1f);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
body.createFixture(fixtureDef);
shape.dispose();
BodyDefs 和 FixtureDefs 在从它们创建 Bodies 和 Fixtures 时被复制,因此它们是可重用的。我的许多游戏对象始终具有相同的形状,因此它们可以共享 FixtureDef:
private static PolygonShape shape = new PolygonShape();
public static FixtureDef platformFixtureDef = new FixtureDef();
static {
shape.setAsBox(1f, 0.2f);
platformFixtureDef.shape = shape;
// as a side question, in this situation, how should I dispose of the shape when the game is over/closed?
}
但是,尽管 BodyDef 的大部分部分对于任何特定类型的对象都保持不变,但位置总是不同的。我应该如何保持 BodyDef 的大部分部分相同,而只是改变位置?重复使用一个静态 BodyDef 是否更好,每次更改位置变量?
或者对于我想要创建的每个 Body,创建一个新的 BodyDef 更好吗?如果我每次都创建一个新的 BodyDef,这会影响内存使用或性能吗? (我每秒创建约 10 个)
【问题讨论】:
标签: java libgdx entity components box2d