我想在我的box2d世界中复制一个身体(包括固定装置,连接它的关节)。
我没有尝试任何东西,因为我没有看到任何方法可以做到这一点。
所以我的问题是:是否有可能复制一个身体?如果是的话,该如何做到这一点。
答案 0 :(得分:2)
我建议创建一个方法来创建一组实体,并将基本组的速度等应用于它们。
Body createGroup()
{
//creating bodies, joints etc
//returning the root body for joint group
}
如果你想逐个复制实体,不幸的是没有简单的方法来实现它。虽然我认为可以实现它。
要创建正文副本,通常需要:
BodyDef和FixtureDef对象 - 无法从正文中获取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();
当你通过迭代夹具列表将多个夹具连接到主体时,你也应该处理这种情况
位置,力度,阻尼等 - 您可以在应用生活中设置身体某些特征,也可以使用
等功能检索它们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;
}
但是复制完全相同的配置似乎并不容易,因为你必须检查你已经创建了哪些关节副本(如果你在身体关节上进行迭代,你也应该迭代它们的neibghbour等等)。 ..)
答案 1 :(得分:0)
您可以按照Utils library(LibGDX论坛)中的建议使用Dermetfan中的this post。它包含一些非常方便的box2dUtils。像Body clonedBody = clone(body,true);
这样的东西可以满足您的需求。