Как исправить количество изображений в фоновом режиме, пока анимация еще продолжается - PullRequest
0 голосов
/ 30 октября 2019

Метод получает новый номер, который должен отображаться вместо текущего номера. Например, текущий номер равен 1, а метод вызывается со значением параметра 5. Идея состоит в том, чтобы анимировать переключение номеров. 1 движется вниз со своего места, а 2 падает сверху. И это повторяется, пока не будет достигнуто 5. Числа представляют ImageNumber классы, которые расширяют ImageView . Номера размещаются на NumberPlace , который расширяет StackPane .

В настоящее время мой код работает следующим образом : при отправке новых чисел анимация идет так, как должна (старый номер перемещается вниз, а новый идет сверху). Но проблема в том, что я постоянно вижу все цифры в центре, пока идет анимация. Таким образом, если текущее число от 1 до 5, это новое число, я получаю все числа от 1 до 5, показанные с перекрытием. Каждый коммутатор помещается в параллельную транзакцию (1 идет вниз, а 2 сверху идет в одну параллельную транзакцию). Все параллельные транзакции помещаются в одну последовательную транзакцию, которая воспроизводится после завершения цикла и выполнения всех параллельных транзакций.

Я думаю, что проблема заключается в добавлении новых элементов ( children ) в разместить объект. Кроме того, удаление надлежащих объектов формирует список детей в нужное время. Может быть, я не прав, может быть, что-то еще проблема.

short tempOld = oldNumber.getNum();
if(tempOld<0)
 tempOld = 0;
short tempNew = newNumber.getNum();
place.getChildren().clear();
SequentialTransition seq = new SequentialTransition();
while(tempOld < tempNew) {
        ImageNumber tempOldImg = new ImageNumber(tempOld);
        ImageNumber temNewImg = new ImageNumber((short) (tempOld+1));
                tempOldImg.setImage(JackpotValueBox.numMap.get(JackpotValueType.BRONZE).get(tempOld));
                temNewImg.setImage(JackpotValueBox.numMap.get(JackpotValueType.BRONZE).get(tempOld+1));

                tempOldImg.setFitHeight(50);
                temNewImg.setFitHeight(50);

                tempOldImg.setFitWidth(50);
                temNewImg.setFitWidth(50);

                temNewImg.setY(temNewImg.getY() - 150);
                place.getChildren().add(0, temNewImg);
                place.getChildren().add(1, tempOldImg);
                TranslateTransition transitionOld = new TranslateTransition();

                transitionOld.setDuration(Duration.millis(700));
                transitionOld.setNode(temNewImg);
                transitionOld.setFromY(-70);
                transitionOld.setToY(0);
                transitionOld.setCycleCount(1);
                transitionOld.setInterpolator(Interpolator.LINEAR);

                TranslateTransition transitionNew = new TranslateTransition();

                transitionNew.setDuration(Duration.millis(700));
                transitionNew.setNode(tempOldImg);
                transitionNew.setFromY(0);
                transitionNew.setToY(100);
                transitionNew.setCycleCount(1);
                transitionNew.setInterpolator(Interpolator.LINEAR);

                ParallelTransition parallel = new ParallelTransition(transitionOld, transitionNew);  
                parallel.setOnFinished(event -> place.getChildren().remove(tempOldImg));
                if(tempOld != tempNew -1) {
                    parallel.setOnFinished(event ->{

                        place.getChildren().remove(temNewImg);

                    });
                }

                seq.getChildren().add(parallel);
                tempOld++;
            }
            this.animation = seq;

Я новичок в javafx. Извините за плохой английский. Надеюсь, я был достаточно ясен.

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