java - 如何在短时间内连续移动?

标签 java javafx

我对 javafx(以及一般的编程)非常陌生,所以对于任何丑陋之处深表歉意。我想做的是在窗口上移动一个正方形,但不是一次移动。我希望它在短时间内连续移动,我得到的看起来像这样:

Rectangle rect = new Rectangle(0, 0, 10, 10);
TranslateTransition tt = new TranslateTransition(new Duration(1000), sq);
tt.setToX(1);
tt.setCycleCount(Timeline.INDEFINITE);
tt.playFromStart();

我的问题是它只是向前移动,然后又跳回原来的位置。我很确定我必须在某个地方拥有其中之一

sq.setX(sq.getX() + sq.getTranslateX());
sq.setTranslateX(0);

但我实在不知道该把它放在哪里。 感谢您的帮助!

最佳答案

有几种不同的方法可以做到这一点,以下是几种:

  1. 使用 SequentialTransition由多个 TranslateTransitions 组成散布着 PauseTransitions .
  2. 设置Timeline它通过一系列 KeyValues 操纵正方形的平移值.

下面的示例使用 SequentialTransition 方法:

step1 step2

import javafx.animation.*;
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class EyeOfSauron extends Application {
    private static final int N_STEPS = 5;
    private static final int SQUARE_SIZE = 10;
    private static final int STEP = SQUARE_SIZE * 2;

    @Override public void start(Stage stage) {
        Rectangle rect = new Rectangle(0, 0, SQUARE_SIZE, SQUARE_SIZE);
        rect.setFill(Color.DARKRED);

        SequentialTransition sequentialTransition = new SequentialTransition();
        for (int i = 0; i < N_STEPS; i++) {
            PauseTransition pt = new PauseTransition(Duration.millis(250));
            TranslateTransition tt = new TranslateTransition(Duration.millis(500), rect);
            tt.setByX(STEP);
            tt.setInterpolator(Interpolator.LINEAR);

            sequentialTransition.getChildren().addAll(
                    pt, tt
            );
        }
        sequentialTransition.getChildren().add(new PauseTransition(Duration.millis(250)));
        sequentialTransition.setAutoReverse(true);
        sequentialTransition.setCycleCount(Transition.INDEFINITE);

        stage.setScene(
                new Scene(
                        new Group(rect),
                        N_STEPS * STEP + SQUARE_SIZE,
                        SQUARE_SIZE,
                        Color.BISQUE
                )
        );
        stage.show();

        sequentialTransition.playFromStart();
    }

    public static void main(String[] args) { launch(args); }
}

关于java - 如何在短时间内连续移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643252/

相关文章:

javafx - 在 javafx 中将整数转换为 ObservableValue<Integer>

Javafx Alert 导致程序卡住

java - 在 Activity 之间传递扩展抽象类的对象

java - Smooks EDI 解析 - 重复段

java - 这种 Swing 行为是错误吗?神秘的 BoxLayout 对齐方式

java - Spring MVC : Relative URL problems

java - 无法使用 Guice 的方法 createInjector 找到符号

javascript - Java 8 Nashorm 引擎无法从 json 对象获取 key

java - 我正在制作一个简单的 JavaFx 程序。只需一个按钮即可查看错误

javafx - Tab 图形中的 ImageView