使用box2d导入json,我没有看到导入的对象

时间:2015-02-13 16:08:03

标签: java json libgdx box2d physics-engine

我对使用Box2D Editor创建的json对象的渲染有问题。 我的问题是,即使对象隔垫(正确根据在线发现的教程),它在舞台上也看不到。

private void createBottle() {
    // 0. Create a loader for the file saved from the editor.
    BodyEditorLoader loader = new BodyEditorLoader(Gdx.files.internal("ball.json"));

    // 1. Create a BodyDef, as usual.
    BodyDef bd = new BodyDef();
    bd.position.set(spaceShip.getX(), spaceShip.getY());
    bd.type = BodyDef.BodyType.DynamicBody;

    // 2. Create a FixtureDef, as usual.
    FixtureDef fd = new FixtureDef();
    fd.density = 1;
    fd.friction = 0.5f;
    fd.restitution = 0.3f;

    // 3. Create a Body, as usual.
    bottleModel = world.createBody(bd);

    // 4. Create the body fixture automatically by using the loader.
    loader.attachFixture(bottleModel, "test01", fd, 8);

}

在create方法中我有这个:

createBottle();
Render方法中的

Vector2 bottlePos = bottleModel.getPosition().sub(bottleModelOrigin);
bottleSprite.setPosition(bottlePos.x, bottlePos.y);
bottleSprite.setOrigin(bottleModelOrigin.x, bottleModelOrigin.y);
bottleSprite.setRotation(bottleModel.getAngle() * MathUtils.radiansToDegrees);
bottleSprite.draw(batch);

我不明白为什么没有添加,我在屏幕上看不到....我有其他项目分配了z位置......但没有什么不想出现。

我的目标是进入使用box2d编辑器制作的迷宫,然后使用虚拟操纵杆进入一个指挥对象,这就是我正在做的游戏......

如果有人想要了解如何成功导入,那么这是第一次使用带有import json的外部编辑器。

EDIT enter image description here

我在尝试发布问题之前也尝试过教程。 然而,错误是在Vector2 ....也是教程是明确但不工作...甚至在线我看到其他示例,他们说,这不起作用...没有资源在运行?我还没找到

1 个答案:

答案 0 :(得分:0)

您可以尝试here

LibGDX通过参考左下角绘制图像。因此,如果您将参考点留在身体的左下角,则可以直接将图像放置在参考点的位置(由Box2d引擎使用getPosition()方法返回).Else,如果您更改了参考点位置,你需要考虑它来绘制图像。

因此,您需要将参考点存储在某处以供以后使用:

bottleModelOrigin = loader.getOrigin("test01", BOTTLE_WIDTH).cpy();

最后,在渲染方法中,您可以在参考点位置绘制图像,相对于图像左下角的局部坐标偏移:

public void render() {
Vector2 bottlePos = bottleModel.getPosition().sub(bottleModelOrigin);

bottleSprite.setPosition(bottlePos.x, bottlePos.y);
bottleSprite.setOrigin(bottleModelOrigin.x, bottleModelOrigin.y);
bottleSprite.setRotation(bottleModel.getAngle() *   MathUtils.radiansToDegrees);

}

您的代码中的问题似乎是您没有名为 bottleModelOrigin 的变量,至少它在您的第一个示例中不可见。虽然在这种情况下应该抛出NullPointerException。