在Libgdx中设置相机旋转

Jon*_*nas 5 java camera rotation box2d libgdx

我似乎无法找到一种方法将我的正交相机在libgdx(带有box2d的项目)的旋转与box2d体的旋转联系起来.有cam.rotate(xy)的方法,给它一个冲动或加速,但我想设置一个确定的值,类似于

cam.setAngle(player.body.getAngle());
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我是否必须编写自己的功能?如果是这样,那怎么样?我希望相机的旋转始终与玩家的旋转相同......

谢谢!

Jon*_*nas 6

经过一夜好眠,我才醒来,想到了解决方案!函数cam.angle(angle)显然会将角度设置为您想要的角度(以度为单位) - 但您只能执行一次而不是更新循环,否则相机才会开始旋转.这是显而易见的,但我只是没有得到它.

另一个问题是box2d体有"无尽"度(我用*MathUtils.radiansToDegrees将所有内容转换为度数),所以我不得不将这些度约束为0到359:

playerAngle = player.body.getAngle()*MathUtils.radiansToDegrees;

while(playerAngle<=0){
        playerAngle += 360;
    }
while(playerAngle>360){
        playerAngle -= 360;
    }
Run Code Online (Sandbox Code Playgroud)

相机的度数从-180到180,所以你还必须将它们转换为0到359:

    camAngle = -getCameraCurrentXYAngle(camera) + 180;
Run Code Online (Sandbox Code Playgroud)

函数"getCameraCurrentXYAngle(cam)如下:

public float getCameraCurrentXYAngle(OrthographicCamera cam)
{
    return (float)Math.atan2(cam.up.x, cam.up.y)*MathUtils.radiansToDegrees;
}
Run Code Online (Sandbox Code Playgroud)

现在使用它来更新你的摄像头到你的播放器的旋转:

    camera.rotate((camAngle-playerAngle)+180);
Run Code Online (Sandbox Code Playgroud)

我希望这有助于提出我问题的人;)

干杯,祝你有充实的一天!乔纳斯