📜  JavaFX |光点类(1)

📅  最后修改于: 2023-12-03 15:01:36.112000             🧑  作者: Mango

JavaFX | 光点类

JavaFX是Java语言的一个图形界面平台,可以用于创建丰富的客户端应用程序,比如桌面应用和游戏开发,其内置了许多可自定义的UI组件和丰富的动画特效。其中,光点类就是其中一个非常有趣的特效。

概述

光点类是JavaFX中的一个类,它继承自javafx.scene.effect.Effect类,可以用来创建出各种动态的光点特效,比如流星、烟花等等。光点类可以通过调整其属性来控制光点的尺寸、形状、颜色和运动轨迹等参数,使得用户可以随意定制出各种奇妙的光点效果。

核心属性

在使用光点类创建光点特效时,主要可以调整以下一些关键属性:

  • 应用效果:表示是否启用光点特效,如果设为false,那么将不会出现任何光点效果。
  • 光点尺寸:表示光点的大小,可以控制光点的半径大小。
  • 扩散范围:表示光点扩散的范围,可以让光点以不同的范围扩散出去,比如一个园形或者一个矩形。
  • 光点颜色:表示光点的颜色,可以控制光点的外观,常见的有绿色、紫色、红色、黄色等等。
  • 光点形状:表示光点的形状,可以使光点呈现不同的形状,比如点、线、园形等等。
  • 运动轨迹:表示光点的运动轨迹,可以控制光点的运动方向和速度,让光点呈现不同的行径。
  • 其他:还有其他一些属性,比如对比度、亮度等等。
核心代码片段

接下来是一个简单的代码示例,演示如何使用光点类来创建一个随机运动的光点特效。在该示例中,我们通过调整光点的半径、颜色和运动轨迹来实现不同的效果。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import java.util.Random;

public class MyLight extends Application {

    private static final int WIDTH = 600;
    private static final int HEIGHT = 400;
    private static final int RADIUS_MIN = 10;
    private static final int RADIUS_MAX = 40;
    private static final int SPEED_MIN = 1;
    private static final int SPEED_MAX = 10;
    private static final int DELAY_MIN = 10;
    private static final int DELAY_MAX = 50;
    private static final int COLOR_ALPHA = 0x6f;
    private static final Random random = new Random();

    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();

        for (int i = 0; i < 100; i++) {
            Circle circle = new Circle();
            circle.setCenterX(random.nextInt(WIDTH));
            circle.setCenterY(random.nextInt(HEIGHT));
            int radius = RADIUS_MIN + random.nextInt(RADIUS_MAX - RADIUS_MIN);
            circle.setRadius(radius);

            Light.Distant light = new Light.Distant();
            light.setAzimuth(random.nextDouble() * 360.0);
            light.setElevation(random.nextDouble() * 180.0 - 90.0);

            Lighting lighting = new Lighting();
            lighting.setLight(light);
            int delay = DELAY_MIN + random.nextInt(DELAY_MAX - DELAY_MIN);
            int speed = SPEED_MIN + random.nextInt(SPEED_MAX - SPEED_MIN);
            lighting.setSpecularExponent(delay * speed * 0.5);
            lighting.setSurfaceScale(speed * 1.0);
            int r = random.nextInt(256);
            int g = random.nextInt(256);
            int b = random.nextInt(256);
            Color color = Color.rgb(r, g, b, COLOR_ALPHA);
            lighting.setDiffuseColor(color);

            circle.setEffect(lighting);
            root.getChildren().add(circle);
        }

        Scene scene = new Scene(root, WIDTH, HEIGHT);
        primaryStage.setScene(scene);
        primaryStage.setTitle("My Light");
        primaryStage.show();

        new Thread(() -> {
            while (true) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {

                }
                for (int i = 0; i < root.getChildren().size(); i++) {
                    Circle circle = (Circle) root.getChildren().get(i);
                    circle.setCenterX(circle.getCenterX() + (random.nextDouble() - 0.5) * 5);
                    circle.setCenterY(circle.getCenterY() + (random.nextDouble() - 0.5) * 5);
                }
            }
        }).start();
    }

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

光点类是JavaFX中一个非常有趣和实用的特效类,可以用于各种桌面应用程序和游戏的特效展示。开发者可以通过控制光点类的属性来实现不同的光点效果,同时也可以加入其他的特效类和组件类来设计更加丰富和灵活的UI体验。