問題を説明するのは難しいので、問題を説明するためにビデオを録画しました。【動画はこちら】
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()));
}
よろしくお願いします!