Всем привет! Всех с пятницей!
Встал такой вопрос - как реализовать плавно перемещающуюся камеру в 3д пространстве, которая бы управлялась клавишами навигации?
До недавнего времена я использовал вот такой код и был доволен.
scene.setOnKeyReleased(e -> codes.clear()); // очищаем коллекцию, когда отпускаем кнопку
scene.setOnKeyPressed(e -> {
if(acceptedKey.contains(e.getCode()))
{
codes.add(e.getCode());
if(codes.contains(KeyCode.UP))
{
ourcamera.setTranslateZ(ourcamera.getTranslateZ()+1);
}
if(codes.contains(KeyCode.DOWN))
{
ourcamera.setTranslateZ(ourcamera.getTranslateZ()-1);
}
if(codes.contains(KeyCode.RIGHT))
{
ourcamera.setTranslateX(ourcamera.getTranslateX()+1);
}
if(codes.contains(KeyCode.LEFT))
{
ourcamera.setTranslateX(ourcamera.getTranslateX()-1);
}
}
});
У такого подхода есть минусы - если мы будем наращивать координату больше, чем на 1, то камера будет прыгать.
Тогда я подумал, что можно попробовать TranslateTransition (). Показывать реализацию с этой байдой я не стану, т.к. мне кажется это неверный подход и плавающая камера реализуется как-то иначе. Но там фишка в том, что необходимо использовать stop(), чтобы запускать следующую анимацию, а это значит движение камеры между разными типами анимаций будет прерываться.
Вообщем, что делать?