繁体   English   中英

在 Libgdx 中设置相机旋转

[英]Set Camera Rotation in Libgdx

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

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

我该怎么做呢? 我必须编写自己的函数吗? 如果是,那又如何? 我希望相机的旋转始终与玩家的...

谢谢!

一夜好眠后,我刚醒来就想到了解决方案! 函数 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);

我希望这对支持我的问题的人有所帮助;)

干杯,有一个富有成效的一天! 乔纳斯

在 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM