gpt4 book ai didi

java - Box2d 复制一个 body (libgdx)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:51 25 4
gpt4 key购买 nike

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

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

所以我的问题是:是否可以复制 body ?如果是,如何做到这一点。

最佳答案

我的建议是创建一种方法来创建物体组,并且只对它们应用基本组的速度等。

    Body createGroup()
{
//creating bodies, joints etc
//returning the root body for joint group
}

不幸的是,如果你想一一复制 body ,没有简单的方法可以实现。虽然我认为有可能实现它。

要创建正文副本,您通常需要:

  • BodyDef 和 FixtureDef 对象 - 无法从主体获取 bodyDef,但您可以在创建主体时轻松地将其写入 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 中阅读有关 body 的信息虽然在我看来更好的引用是 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;
    }

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

关于java - Box2d 复制一个 body (libgdx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com