我有一个从左到右动画的矩形。我希望矩形在每个循环计数后随机改变颜色,但我希望它只改变所选颜色的颜色。例如,我有红色,蓝色和橙色,然后我希望矩形只改变红色,蓝色和橙色的颜色。例如,如果它从左向右移动,则首先是蓝色,然后在一个循环计数(从左到右完成)后,它应该将颜色更改为红色或橙色,依此类推。
以下是我的以下代码:
public class Rect extends Application {
@Override
public void start(Stage stage) {
Pane canvas = new Pane();
Scene scene = new Scene(canvas, 500, 600);
Rectangle rect = new Rectangle (100, 40, 100, 100);
rect.setArcHeight(50);
rect.setArcWidth(50);
rect.setFill(Color.BLUE);
TranslateTransition tt1 = new TranslateTransition(Duration.millis(3000), rect);
tt1.setByY(1000f);
tt1.setCycleCount(Animation.INDEFINITE);
tt1.setAutoReverse(false);
tt1.play();
canvas.getChildren().add(rect);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
答案 0 :(得分:2)
使用Timeline
代替TranslateTransition
。 Timeline
使用KeyFrame
的集合,KeyFrame
允许您指定在到达帧时要执行的处理程序,以及该属性的属性和值: / p>
import java.util.Random;
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Rect extends Application {
@Override
public void start(Stage stage) {
Pane canvas = new Pane();
Scene scene = new Scene(canvas, 500, 600);
Rectangle rect = new Rectangle(100, 40, 100, 100);
rect.setArcHeight(50);
rect.setArcWidth(50);
rect.setFill(Color.BLUE);
Color[] palette = new Color[] { Color.RED, Color.BLUE, Color.ORANGE };
Random rng = new Random();
Timeline tt1 = new Timeline(
new KeyFrame(
Duration.millis(3000),
e -> rect.setFill(palette[rng.nextInt(palette.length)]),
new KeyValue(rect.yProperty(), 1040)
)
);
tt1.setCycleCount(Animation.INDEFINITE);
tt1.setAutoReverse(false);
tt1.play();
canvas.getChildren().add(rect);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}