krembrule2016
@krembrule2016

Как двигать графические объекты окна, пока курсор находится в определенном положении?

Всем привет!
Чтобы было понятно, пришпандорю сюда картинку, которой я объяснял свою проблему басурманам.
5c0e247427ed0887026104.png
Своими силами я написал вот такой код:
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();

Но, переменные, которые мы передаем через лямбду, да или просто используем анонимный класс, не должны изменять свое значение. Должны быть финальными.
Как быть? В какую сторону смотреть?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
krembrule2016
@krembrule2016 Автор вопроса
Если кому-то будет интересно, как я вышел из положения, то я просто создал финальный объект. Т.е. логика следующая: если у финальной переменной вы значение в лямбде менять не можете, то свойства объекта меняются на раз два.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы