2013-05-12 4 views
5

Я не могу найти способ связать вращение моей орто-камеры в libgdx (проект с box2d) с вращением корпуса box2d. Существует метод cam.rotate (х), что дает ему импульс или ускорение, но я хотел бы установить окончательное значение, что-то вродеУстановить поворот камеры в Libgdx

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

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

Спасибо!

ответ

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; 
    } 

камеры градусы перейти от -180 до 180, так что вы должны преобразовать их в 0 до 359:

camAngle = -getCameraCurrentXYAngle(camera) + 180; 

функция «getCameraCurrentXYAngle (кулачок) заключается в следующем:

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

И теперь в использовании этого, чтобы обновить вашу камеру к вращению проигрывателя:

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

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

Приветствия и иметь продуктивный день! Jonas

Смежные вопросы