我对 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);
但我实在不知道该把它放在哪里。 感谢您的帮助!
最佳答案
有几种不同的方法可以做到这一点,以下是几种:
- 使用 SequentialTransition由多个 TranslateTransitions 组成散布着 PauseTransitions .
- 设置Timeline它通过一系列 KeyValues 操纵正方形的平移值.
下面的示例使用 SequentialTransition 方法:
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/