Установка поворота камеры в Libgdx


Я не могу показаться, чтобы найти способ, чтобы связать вращение мою камеру Орто в libGDX (в проекте с Box2D) с вращением Box2D в организме. Существует способа кулачок.вращайте (xy), давая ему импульс или ускорение, но я хотел бы установить определенное значение, что-то вроде

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

Как бы я это сделал? Должен ли я написать свою собственную функцию? Если да, то как? Я хочу, чтобы вращение камеры всегда было таким же, как у игрока...

Спасибо!

1 5

1 ответ:

После хорошего ночного сна я просто проснулся с решением в голове! функциональная камера.угол (угол), очевидно, устанавливает угол на то, что вы хотите (в градусах) - но вы должны сделать это только один раз, а не в цикле обновления, иначе камера просто начнет вращаться. Это очевидно, но я просто не понял.

Другая проблема заключается в том, что тело 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);

Я надеюсь, что это поможет человеку, который отклонил мой вопрос;)

Ура и удачного Вам дня! Джонас