我在javaFX中创建了一些节点。我需要为每个节点设置动画,以使用PaneTranslateTransition中的某个点到另一个点之间进行转换。但是我需要使每个节点使用不同的起点独立移动。如何做到这一点?我的意思是在javaFX中有类似Thread.pause的东西。我尝试使用下面的代码中所示的粗略方法:

    public void mouseRespon(final double x, final double y){
    animasi.pause();
    thread = new Thread(
            new Runnable() {
                @Override
                public void run() {
                    int i = 0;
                    while(threadStatus && i < allList.size()){
                        final int j = i;
                        Platform.runLater(new Runnable() {
                            @Override
                            public void run() {
                                DynamicsText text = allList.get(j);
                                TranslateTransition transition = new TranslateTransition();
                                transition.setNode(text);
                                transition.setFromX(text.getTranslateX());
                                transition.setFromY(text.getTranslateY());
                                text.setDestinyOffset(x, y);
                                text.initCurrentOffSet();
                                double destX = text.getPotitionX();
                                double destY = text.getPotitonY();
                                transition.setToX(destX);
                                transition.setToY(destY);
                                transition.setDuration(Duration.seconds(1));
                                transition.setAutoReverse(false);
                                transition.setCycleCount(1);
                                transition.play();
                            }
                        });
                        try{
                            Thread.sleep(25);
                        }catch(Exception e){}
                        i++;
                    }
                }
            });
    thread.start();
    animasi.play();
}


但是我认为这不是一个好方法。实际上,当我运行该代码段时,会使程序崩溃(有时)。

最佳答案

创建一个ParallelTransition

对于要移动的每个零件,创建一个SequentialTransition,一个PauseTransitionTranslateTransition。每块PauseTransition的值应逐渐增大,例如0、25ms,50ms,75ms等。将PauseTransitionTranslateTransition添加到SequentialTransition。将每个SequentialTransition添加到ParallelTransition

然后播放ParallelTransition

无需创建任何Thread或与Platform.runLater(...)混淆。

09-05 08:28