【发布时间】:2015-09-17 01:34:35
【问题描述】:
我想在我的 box2d 世界中复制一个物体(包括固定装置、连接到它的关节)。
我什么都没尝试,因为我没有看到任何方法可以做到这一点。
所以我的问题是:是否可以复制正文?如果是,该怎么做。
【问题讨论】:
我想在我的 box2d 世界中复制一个物体(包括固定装置、连接到它的关节)。
我什么都没尝试,因为我没有看到任何方法可以做到这一点。
所以我的问题是:是否可以复制正文?如果是,该怎么做。
【问题讨论】:
我的建议是创建将创建物体组的方法,并将基组的速度等应用于它们。
Body createGroup()
{
//creating bodies, joints etc
//returning the root body for joint group
}
如果你想一个一个地复制正文,不幸的是没有简单的方法来实现它。虽然我认为有可能实现它。
要创建您通常需要的正文副本:
BodyDef 和 FixtureDef 对象 - 无法从 body 中获取 bodyDef,但您可以在创建 body 时轻松将其写入 UserData 对象,然后获取 UserData
BodyDef bodyDef = new BodyDef();
FixtureDef fixtureDef = new FixtureDef();
//setting up body and fixture definitions
body = world.createBody(bodyDef);
body.createFixture(fixtureDef).setUserData( fixtureDef );
body.setUserData( bodyDef );
...
//then just somewhere in your app
BodyDef copyBodyDef = (BodyDef) body.getUserData();
FixtureDef copyFixtureDef = (FixtureDef) body.getFixtureList().first().getUserData();
您还应该通过遍历夹具列表来处理将多个夹具附加到主体的情况
Position、Velocity、Damping 等 - 您可以在应用生命周期中设置 body 的一些特征,也可以使用类似的函数检索它们
Vector2 getLinearVelocity();
Vector2 getPosition()
...
您可以在 official box2d manual 中阅读有关机构的信息,尽管我认为更好的参考是 the LibGDX one。
关节 - 我认为这是最大的问题。您可以使用以下方法迭代关节:
for(JointEdge edge : body.getJointList())
{
Joint joint = edge.joint; //joint has getUserData() so you can again remember joint definition
Body jointBody = edge.other;
}
但是复制完全相同的配置似乎并不容易,因为您必须检查您已经创建了哪些关节副本(如果您迭代身体关节,您还应该迭代它们的邻居关节等等。 ..)
【讨论】:
您可以使用来自 Dermetfan 的 Utils library,正如 this post(LibGDX 论坛)中所建议的那样。它包含一些非常方便的 box2dUtils。 Body clonedBody = clone(body,true); 之类的东西应该可以满足您的需求。
【讨论】: