LibGDX旋转身体问题

时间:2013-08-16 15:00:12

标签: image rotation box2d libgdx actor

很难解释这个问题所以我录制了一个视频来说明问题。 [Video here]

我在box2d对象(body)中有图像。当用户拖动一个演员时,下面的身体也会移动,以便图像跟随物理。当身体没有完全旋转时,一切都按预期工作(拖放),但是当旋转发生时,运动变得疯狂,从而产生无限旋转的不良效果。

这是我的方法:

在构造函数中:

for(final Brick b : map.list){
        stage.addActor(b.img);
        Vector3 v = new Vector3(b.box.getPosition().x,b.box.getPosition().y,0);
        camera.project(v);

        b.img.setPosition(v.x-b.img.getWidth()*0.5f, v.y-b.img.getHeight()*0.5f);
        b.img.setOrigin(b.img.getWidth()*0.5f, b.img.getHeight()*0.5f);
        b.img.setRotation((float) Math.toDegrees(b.box.getAngle()));


        b.img.addListener((new DragListener() {
            public void touchDragged (InputEvent event, float x, float y, int pointer) {
                float newPosX =b.img.getX() + x;
                float newPosY = b.img.getY() +  y;
                b.img.setPosition(newPosX-b.img.getWidth()*0.5f,newPosY-b.img.getHeight()*0.5f);
                b.box.setTransform(newPosX, newPosY, b.box.getAngle());
           }

        }));
    }

其中map.list是包含可以拖动的所有实体的列表。

在渲染功能中:

for(final Brick b : map.list){
            b.img.setVisible(true);
            b.img.setPosition(b.box.getPosition().x-b.img.getWidth()*0.5f, b.box.getPosition().y-b.img.getHeight()*0.5f);
            b.img.setOrigin(b.img.getWidth()*0.5f, b.img.getHeight()*0.5f);
            b.img.setRotation((float) Math.toDegrees(b.box.getAngle()));
        }

提前多多感谢!

1 个答案:

答案 0 :(得分:0)

我认为你的问题是你没有错误地设置旋转原点。

b.img.setOrigin(b.img.getWidth()*0.5f, b.img.getHeight()*0.5f);

只要尸体完全没有旋转,一切正常。假设你的身体位置在身体的中心,这应该是

b.img.setOrigin(v.x, v.y);

尝试使用Box2dDebugRenderer快速检查身体是否真的移动得如此奇怪,或者你是否只是错误地绘制图片。