在Libgdx中设置相机旋转

6

我似乎找不到一种方法来将我的ortho相机的旋转(在带有box2d的libgdx项目中)与box2d身体的旋转联系起来。 有一种方法是使用cam.rotate(xy)方法,给它一个冲量或加速度,但我想设置一个明确的值,就像这样:

cam.setAngle(player.body.getAngle());

我该如何做到这一点?我需要编写自己的函数吗?如果是这样,那么如何编写?我希望相机的旋转始终与玩家的旋转保持一致...

谢谢!

2个回答

10

经过一夜的良好睡眠,我突然想出了解决方案!函数cam.angle(angle) 显然会将角度设置为您想要的值(以度为单位)- 但您只能在一次性地进行设置,而不是在更新循环中进行设置,否则相机会开始旋转。这是显而易见的,但我当时没有理解。

另一个问题是box2d身体具有“无限”的度数(我使用*MathUtils.radiansToDegrees将所有值转换为度),因此我必须将它们约束在0到359之间:

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

while(playerAngle<=0){
        playerAngle += 360;
    }
while(playerAngle>360){
        playerAngle -= 360;
    }

相机的度数范围为-180到180,因此您还必须将其转换为0到359:

    camAngle = -getCameraCurrentXYAngle(camera) + 180;

函数"getCameraCurrentXYAngle(cam)"的代码如下:

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

现在使用此功能来根据您的玩家旋转更新您的摄像头:

    camera.rotate((camAngle-playerAngle)+180);

希望这能帮助给我点赞的人;)

祝您愉快并有一个充实的一天! 乔纳斯


2

在Box2D中,如之前所提到的,角度可以是无限的。然而,用于限制角度的方法相当低效。更有效的解决方案是使用以下代码段中的模运算:

playerAngle = (player.body.getAngle() % 360) * MathUtils.radiansToDegrees()

接下来需要确定相机的角度,上面提供的解决方案在这方面是足够的,但可以进一步简化为:

public float getCameraAngle(OrthographicCamera cam) {
    return ((float) -Math.atan2(cam.up.x, cam.up.y) * MathUtils.radiansToDegrees) + 180;
}

现在使用rotate()方法,可以高效地旋转摄像机到给定角度的所有可能值:

camera.rotate((getCameraAngle(camera) - playerAngle) + 180)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接