Язык программирования:
Java
Среда программирования:
IntelliJ IDEA 15.0.4
package me.grafika.barbanyagra; import javafx.animation.Animation; import javafx.animation.PathTransition; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.effect.BlendMode; import javafx.scene.paint.*; import javafx.scene.shape.Circle; import javafx.scene.shape.LineTo; import javafx.scene.shape.MoveTo; import javafx.scene.shape.Path; import javafx.stage.Stage; import javafx.util.Duration; public class Lights extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Group root = new Group(); // корневой элемент сцены primaryStage.setTitle("Lights"); // заголовок окна primaryStage.setScene(new Scene(root, 500, 500, Color.BLACK)); primaryStage.setResizable(false); // запрещаем изменять размер окна // цвета окружностей RadialGradient[] colors = { // радиальный градиент от непрозрачного до 70%-непрозрачного красного new RadialGradient(0, 0, 0.5, 0.5, 0.5, true, CycleMethod.NO_CYCLE, new Stop(0, new Color(1, 0, 0, 1)), new Stop(0.4, new Color(1, 0, 0, 0.96)), new Stop(0.7, new Color(1, 0, 0, 0.86)), new Stop(1, new Color(1, 0, 0, 0.7))), // радиальный градиент от непрозрачного до 70%-непрозрачного зеленого new RadialGradient(0, 0, 0.5, 0.5, 0.5, true, CycleMethod.NO_CYCLE, new Stop(0, new Color(0, 1, 0, 1)), new Stop(0.4, new Color(0, 1, 0, 0.96)), new Stop(0.7, new Color(0, 1, 0, 0.86)), new Stop(1, new Color(0, 1, 0, 0.7))), // радиальный градиент от непрозрачного до 70%-непрозрачного синего new RadialGradient(0, 0, 0.5, 0.5, 0.5, true, CycleMethod.NO_CYCLE, new Stop(0, new Color(0, 0, 1, 1)), new Stop(0.4, new Color(0, 0, 1, 0.96)), new Stop(0.7, new Color(0, 0, 1, 0.86)), new Stop(1, new Color(0, 0, 1, 0.7))), }; Group circles = new Group(); // группа для кругов // устанавливаем режим смешение "сложение" (подробно о режимах смешения: <a href="https://en.wikipedia.org/wiki/Blend_modes" title="https://en.wikipedia.org/wiki/Blend_modes">https://en.wikipedia.org/wiki/Blend_modes</a>) circles.setBlendMode(BlendMode.ADD); PathTransition[] pts = new PathTransition[3]; // массив перемещений for (int i = 0; i < 3; i++) { Circle circle = new Circle(118, colors[i]); // создаем окружность circles.getChildren().add(circle); // добавляем ее в группу circle.setBlendMode(BlendMode.ADD); // устанавливаем режим смешение "сложение" PathTransition pt = new PathTransition(); // создаем анимацию-перемещение pt.setNode(circle); // добавляем в нее круг pt.setDuration(Duration.millis(1700)); // устанавливаем продолжительность движения pt.setPath(new Path( new MoveTo(180, 250), new LineTo(320, 250), // прямая линия new LineTo(180, 250) // обратная прямая линия )); pt.setCycleCount(Animation.INDEFINITE); // указываем, что перемещение должно выполняться неограниченное число раз pts[i] = pt; // сохраняем перемещение } root.getChildren().add(circles); // добавляем круги в корневой элемент primaryStage.show(); // запускаем сцену // перематываем перемещения на 0t, 1/3t, 2/3t, чтобы центры кругов изначально находились в разных позициях for (int i = 0; i < 3; i++) { pts[i].jumpTo(pts[i].getDuration().multiply(i / 3.)); } for (int i = 0; i < 3; i++) { pts[i].play(); // запускаем анимацию } } }
Прикрепленный файл | Размер |
---|---|
Lights.zip | 35.25 кб |