Оператор переключения, используя только один случай за раз - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь перевести квадрат 'p' на 5 единиц влево или вправо в зависимости от того, какая клавиша была нажата.Проблема в том, что когда нажата «вправо» или «влево», это переведет 5 единиц в этом направлении, но когда я нажимаю снова, я не могу двигаться, и мне приходится нажимать «влево», чтобы снова двигаться вправо, чтобы я никуда не попал.Кто-нибудь знает, почему это так?

    Task PlyThread=new Task() {
        @Override
        protected Object call() throws Exception {
            myScene.setOnKeyPressed(event -> {
                switch (event.getCode()){
                    //case UP: p.setTranslateY(((p.getY())-5)) ; break;
                    case LEFT: p.setTranslateX(((p.getX())-5)) ; break;
                    case RIGHT: p.setTranslateX(((p.getX())+5)) ;break;


                }
            });

            return null;
        }
    };new Thread(PlyThread).start();

1 Ответ

0 голосов
/ 01 марта 2019

Хорошо, я предполагаю, что "Прямоугольник" равен javafx.scene.shape.Rectangle.В этом случае setTranslateX() только изменяет матрицу преобразования и не меняет координату прямоугольника X. Значение свойства X остается неизменным, и следующий вызов setTranslateX(getX()+5) выполняет ту же работу, что и предыдущий.

Вам нужнодля работы с переводами или с координатами, т. е. используйте setTranslateX() / getTranslateX() или setX() / getX().

Оба варианта могут иметь другие последствия, помимо перемещения прямоугольника на экране, но у меня нет опыта работы с JavaFX, поэтому, к сожалению, я не могу более подробно остановиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...