Всем привет!
Чтобы было понятно, пришпандорю сюда картинку, которой я объяснял свою проблему басурманам.
Своими силами я написал вот такой код:
scene.setOnMouseMoved(e -> {
System.out.println(e.getX()+" "+e.getY());
if(e.getX()>750)
{
camera.cameraControlX(-0.5);
}else if(e.getX()<50)
{
camera.cameraControlX(0.5);
}
if(e.getY()>550)
{
camera.cameraControlY(-0.5);
}else if(e.getY()<50)
{
camera.cameraControlY(0.5);
}
В функции cameraControlX||Y я просто двигаю картинки по сцене. Это работает, но работает оно только пока курсор находится в движении.
На стаковерфлоу мне предложили вот такой вариант:
boolean north = false, east = false, south = false, west = false;
scene.setOnMouseMoved(e -> {
if(e.getX()>750)
{
east = true;
}else if(e.getX()<50)
{
west = true;
}else{
east = false;
west = false;
}
if(e.getY()>550)
{
south = true;
}else if(e.getY()<50)
{
north = true;
}else{
north = false;
south = false;
}
});
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
if(east)camera.cameraControlX(-0.5);
if(west)camera.cameraControlX(0.5);
if(south)camera.cameraControlY(-0.5);
if(north)camera.cameraControlY(0.5);
}
};
timer.start();
Но, переменные, которые мы передаем через лямбду, да или просто используем анонимный класс, не должны изменять свое значение. Должны быть финальными.
Как быть? В какую сторону смотреть?