Libgdx - Box2D:将物理主体编辑器加载器掩码附加到动态纹理

时间:2013-08-07 18:26:19

标签: java android box2d libgdx game-physics

我有一个圆形纹理,当发生触摸拖动时会被绘制到一个新位置。它不是一个整体。

我使用Aurelien Ribon的物理身体编辑器加载器GUI制作了一个物理地图到圆圈的上部和下部,我想在纹理的位置绘制该蒙版,并在发生拖动时绘制到新的位置。 / p>

我该怎么做?在我的create方法中,我初始化变量,蒙版被绘制到纹理的初始位置,但是当我移动它时,蒙版保持在圆的初始位置。

这是我的代码:

Create()方法:

 //... rest of the method ommited for clarity

    karika = gameWorld.getKarika();

    World world = new World(new Vector2(0, 0), false);


Box2DDebugRenderer renderer = new Box2DDebugRenderer();
    BodyEditorLoader karikaLoader = new BodyEditorLoader(Gdx.files.internal("data/collision-masks/karika.json"));

    BodyDef karikaDef = new BodyDef();
    karikaDef.type = BodyType.DynamicBody;
    karikaDef.position.set(karika.getPosition().x, karika.getPosition().y);
    karikaDef.angle = karika.getRotation();

    Body karikaBody = world.createBody(karikaDef);

    FixtureDef karikaFixture = new FixtureDef();
    karikaFixture.density = 0.5f;
    karikaFixture.friction = 0.8f;
    karikaFixture.restitution = 0.6f;

    karikaLoader.attachFixture(karikaBody, "karika", karikaFixture, karika.getWidth());
    Vector2 karikaBodyOrigin = karikaLoader.getOrigin("karika", karika.getWidth()).cpy();

    //rest of the method ommited for clarity

我的render()方法:

 //...
    batch.begin();
    batch.draw(karikaTexture, karika.getPosition().x, karika.getPosition().y, karika.getWidth() / 2, karika.getHeight() / 2, karika.getWidth(), karika.getHeight(), 1, 1, karika.getRotation(), 0, 0, karikaTexture.getWidth(), karikaTexture.getHeight(), false, false);
    batch.end();
renderer.render(world, cam.combined);
    world.step(1 / 60f, 6, 2);
    //...

在render方法中绘制的纹理是我的圆形纹理。如前所述,我没有把它设置为一个身体,只有碰撞面具。

我想做的是,蒙版附加到纹理,并跟上它的位置,例如当我拖动圆圈时,蒙版应该 on < / em>圆圈。

1 个答案:

答案 0 :(得分:0)

查看DebugRenderer。它运作良好,并且正是您所要求的。

以下是如何使用它。

debugRenderer.render(this.world, camera.combined);

这是a more thorough tutorial

我建议您使用物理对象的位置指定圆的位置,而不是尝试将物理对象指定给纹理的位置。

在您的代码中,您似乎使用karikaBody的当前位置创建了karika,但之后karikaBody位置永远不会更新。所以你的“碰撞面具”(你的物理身体)位置永远不会改变。