Язык программирования:
Java
Среда программирования:
IntelliJ IDEA 2017.3.4
package sample; import java.util.Random; import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public class Main extends Application { private static final int SPARKS = 1000; //количество искр private final Rectangle[] nodes = new Rectangle[SPARKS]; //хранит искры private final double[] angles = new double[SPARKS]; // хранит углы по которым они летят private final long[] start = new long[SPARKS]; // хранит частоту с которой вылетают искры private final Random random = new Random(); @Override public void start(final Stage primaryStage) { for (int i = 0; i < SPARKS; i++) { Color[] colors = new Color[] { Color.GREEN, Color.YELLOW}; // цвета Color randomColor = colors[new Random().nextInt(2)]; // случайный выбор из двух цветов nodes[i] = new Rectangle(4, 2, randomColor); // присваиваем каждому элементу массива фигуру angles[i] = 2.0 * Math.PI * random.nextDouble(); // присваиваем каждому элементу массива угол start[i] = random.nextInt(2000000000); // присваиваем каждому элементу массива частоту } // окно final Scene scene = new Scene(new Group(nodes), 400, 400, Color.BLACK); primaryStage.setScene(scene); primaryStage.show(); primaryStage.setResizable(false); // анимация new AnimationTimer() { @Override public void handle(long now) { final double width = 0.5 * primaryStage.getWidth(); // определяем точку из которой вылетают искры final double height = 0.5 * primaryStage.getHeight(); final double radius = Math.sqrt(1.7) * Math.max(width, height); // определяем радиус на который вылетают искры // анимация для каждой фигуры for (int i = 0; i < SPARKS; i++) { final Node node = nodes[i]; final double angle = angles[i]; final long t = (now - start[i]) % 2000000000; // разброс искр final double d = t * radius / 2000000000.0; // перемещает искры node.setTranslateX(Math.cos(angle) * d + width); node.setTranslateY(Math.sin(angle) * d + height); } } }.start(); } public static void main(String[] args) { launch(args); } }
Прикрепленный файл | Размер |
---|---|
Sparks.zip | 14.48 кб |