如何在 libgdx 中为精灵应用圆周运动

How to apply circular motion for sprites in libgdx

我想要四个精灵围绕一个原点运行。但是如果我这样使用

        sprite_p1_avatar = new Sprite(dummyText);
        sprite_p1_avatar.setPosition(200, 200);
        sprite_p1_avatar.setOrigin(100, 100);

        sprite_p2_avatar = new Sprite(dummyText);
        sprite_p2_avatar.setPosition(300, 300);
        sprite_p2_avatar.setOrigin(100, 100);

        sprite_p3_avatar = new Sprite(dummyText);
        sprite_p3_avatar.setPosition(400, 400);
        sprite_p3_avatar.setOrigin(100, 100);

        sprite_p4_avatar = new Sprite(dummyText);
        sprite_p4_avatar.setPosition(500, 500);
        sprite_p4_avatar.setOrigin(100, 100);

        sprite_p1_avatar.rotate(40 * delta);

        sprite_p1_avatar.draw(batch);

        sprite_p2_avatar.rotate(40 * delta);
        sprite_p2_avatar.draw(batch);

        sprite_p3_avatar.rotate(40 * delta);
        sprite_p3_avatar.draw(batch);

        sprite_p4_avatar.rotate(40 * delta);
        sprite_p4_avatar.draw(batch);

精灵在旋转时会倒置,因为这些精灵是用户的个人资料图片,我希望它们在每个点都保持直线运动。有没有办法让精灵沿着圆形路径移动而不旋转。

从您的代码中可以清楚地看出,您只是在将原点设置为 100,100 时旋转单个精灵

你必须像地球围绕太阳移动一样通过改变它们的位置来围绕中心 (100,100) 移动精灵。

原点是精灵旋转中心。

所以给你的形状一个半径 r = 50, 圆心 (cx,cy)=(100,100)

应用几何计算圆周长上的点

double radianDegrees = Math.toRadians(d);
double updatedX = cx + r * Math.cos(radianDegrees);
double updatedY = cy + r * Math.sin(radianDegrees); 

并将角度增加 a,这是您要移动精灵的速率

您可以创建一个 'helper'-Vector 来表示距原点的距离。

像那样:

private Vector2 origin;
private Vector2 distance;

void ctor(){
    origin = new Vector2();
    distance = new Vector2(0, 100);
}

public void update(float Delta){
    origin.set(200, 200);
    distance.rotate(40 * Delta);
    Vector2 newPos = origin.add(distance);
    sprite.setPosition(newPos.x - sprite.width/2, newPos.y - sprite.height/2);
}