2013-10-25 5 views
1

Я делаю 2D-нисходящую игру в LibGDX, используя орфографическую камеру. Камера должна следить за игроком, вращаться вместе с ним и т. Д. Я также использую Box2D, что означает, что каждый спрайт обновляется по координатам и углу модели. И я хочу сделать то же самое с камерой.LibGDX - Перевод и ротация орфографической камеры

Этот код:

Vector3 v = new Vector3(playerModel.getPosition().x, playerModel.getPosition().y, 0); 
camera.rotateAround(v, Vector3.Z, -playerModel.getAngle() * MathUtils.radiansToDegrees); 
camera.translate(deltaMove); 
camera.update(); 

дает мне только относительное перемещение и вращение - относительно текущего положения и угла наклона камеры. И хотя это работает, я не думаю, что это самое лучшее, это ?:

Vector3 v = new Vector3(playerModel.getPosition().x, playerModel.getPosition().y, 0); 
camera.up.x = (float) Math.cos(playerModel.getAngle()); 
camera.up.y = (float) Math.sin(playerModel.getAngle()); 
camera.position.x = v.x; 
camera.position.y = v.y; 
camera.update(); 

Можно ли сделать это плавный путь с орфографической камеры или я должен использовать КЛАССИС 3D-камеру?

+0

Вы устанавливаете положение и угол, полностью синхронизированный с плеером. Как вы хотите, чтобы он был более гладким? – noone

+0

Почему у него нет сеттеров? Я даже не могу изменить вектор vector.position (потому что он окончательный) только его свойства, поэтому я подумал, что это не правильный способ установки камеры. Nevermind :) – chriemmy

+1

Я не знаю, почему именно так. Вы по-прежнему можете использовать функцию camera.position.set (...), которая в основном аналогична функции camera.setPosition (...). Я предполагаю, что это происходит потому, что это уменьшает количество создаваемых «новых» векторов и сохраняет один вызов метода, что может повлиять на мобильные устройства. – noone

ответ

0

Вы можете удалить отрывистые движения камеры путем интерполяции свойств камеры текущего кадра между последними свойствами камеры и новыми свойствами камеры. Движения камеры очень рывкие, если вы не используете какой-то interpolation.

Надеюсь, что это поможет, я хотел бы перейти к тому, как реализовать такое изменение, но, похоже, это выходит за рамки этого вопроса.

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