Как сделать гладкий алгоритм слежения за камерой?
Я делаю игру с LibGDX (Java).
Мне нужна камера, чтобы следовать быстро движущемуся персонажу. Самый простой способ сделать это - просто написать это:
this.getCamera().position.set(obj.x, obj.y, 0);
Но есть ли какой-нибудь алгоритм, чтобы сделать его более гладким? Например, когда камера не такая уж строгая и всегда немного опаздывает: персонаж идет быстро, камера следует с небольшой задержкой, или если вы внезапно появились где-то далеко, камера не телепортируется мгновенно, а путешествует с максимальной скоростью, когда она приближается, он немного замедляется и снова находит вас.
Есть ли какие-либо libgdx libs, которые делают это или кто-либо имел этот опыт?
Ответы
Ответ 1
Попробуйте что-то простое, например, на десятую часть расстояния. Это работает на удивление хорошо.
float lerp = 0.1f;
Vector3 position = this.getCamera().position;
position.x += (Obj.x - position.x) * lerp * deltaTime;
position.y += (Obj.y - position.y) * lerp * deltaTime;
Ответ 2
Взгляните на Aurelion Ribon Java Universal Tween Engine. Это выполняет интерполяцию и имеет несколько смягчающих уравнений, которые, я думаю, доставят вам то, что вы ищете. Он также имеет другие расширенные функции, такие как маршрутизация и объединение определенных действий для других интересных эффектов.
В вашей игровой логике можно проверить, движется ли персонаж быстро или имеет изменение шага в позиции. В ответ на это поверните текущую позицию камеры на движок анимации движения и дайте ей перейти - плавно приближайтесь к текущему положению символа.