【问题标题】:Box2d Copy a body (libgdx)Box2d 复制主体 (libgdx)
【发布时间】:2015-09-17 01:34:35
【问题描述】:

我想在我的 box2d 世界中复制一个物体(包括固定装置、连接到它的关节)。

我什么都没尝试,因为我没有看到任何方法可以做到这一点。

所以我的问题是:是否可以复制正文?如果是,该怎么做。

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    我的建议是创建将创建物体组的方法,并将基组的速度等应用于它们。

        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;
      }
      

      但是复制完全相同的配置似乎并不容易,因为您必须检查您已经创建了哪些关节副本(如果您迭代身体关节,您还应该迭代它们的邻居关节等等。 ..)

    【讨论】:

      【解决方案2】:

      您可以使用来自 Dermetfan 的 Utils library,正如 this post(LibGDX 论坛)中所建议的那样。它包含一些非常方便的 box2dUtils。 Body clonedBody = clone(body,true); 之类的东西应该可以满足您的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 2014-06-05
        相关资源
        最近更新 更多