0

問題を説明するのは難しいので、問題を説明するためにビデオを録画しました。【動画はこちら】

box2d オブジェクト (ボディ) に画像があります。ユーザーがアクターをドラッグすると、その下のボディも動き、画像​​が物理に追従します。体が完全に回転していない場合、すべてが期待どおりに機能します (ドラッグ & ドロップ) が、回転が発生すると動きが狂って、無限回転の望ましくない効果が生じます。

これが私のアプローチです:

コンストラクターで:

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

よろしくお願いします!

4

1 に答える 1

0

あなたの問題は、回転の原点を正しく設定していないことだと思います。

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

体がまったく回転しない限り、すべてが正常に機能します。あなたの体の位置が体の中心にあると仮定すると、これは実際には

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

Box2dDebugRenderer を使用して、体が本当に変な動きをしているかどうか、または絵を間違って描いているだけかどうかをすばやく確認してください。

于 2013-08-18T09:15:43.783 に答える