Подтвердить что ты не робот

Как сделать гладкий алгоритм слежения за камерой?

Я делаю игру с LibGDX (Java).

Мне нужна камера, чтобы следовать быстро движущемуся персонажу. Самый простой способ сделать это - просто написать это:

this.getCamera().position.set(obj.x, obj.y, 0);

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

Есть ли какие-либо libgdx libs, которые делают это или кто-либо имел этот опыт?

4b9b3361

Ответ 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. Это выполняет интерполяцию и имеет несколько смягчающих уравнений, которые, я думаю, доставят вам то, что вы ищете. Он также имеет другие расширенные функции, такие как маршрутизация и объединение определенных действий для других интересных эффектов.

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