Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image JavaFX-深色背景上的多个灯光_Image_Javafx 8_Effects_Lighting - Fatal编程技术网

Image JavaFX-深色背景上的多个灯光

Image JavaFX-深色背景上的多个灯光,image,javafx-8,effects,lighting,Image,Javafx 8,Effects,Lighting,我正试图用JavaFX创建一个类似于小地图的东西,即一个(变暗的)背景图像,上面有一些圆圈。其中一些圆圈需要能够照亮背景,露出其中的一小部分。下图显示了我的目标 我一直在努力使用,但目前,我被卡住了,因为您似乎只能在底层的StackPane上设置javafx.scene.effect.Lighting的一个实例 我真的希望尽可能简单,最好只使用JavaFX。非常感谢您的帮助:)我建议使用BlendMode在窗格上添加一个填充有径向梯度的圆圈,并使用BlendMode将其与包含“地图”的图像视图

我正试图用JavaFX创建一个类似于小地图的东西,即一个(变暗的)背景图像,上面有一些圆圈。其中一些圆圈需要能够照亮背景,露出其中的一小部分。下图显示了我的目标

我一直在努力使用,但目前,我被卡住了,因为您似乎只能在底层的
StackPane
上设置
javafx.scene.effect.Lighting
的一个实例


我真的希望尽可能简单,最好只使用JavaFX。非常感谢您的帮助:)

我建议使用
BlendMode在
窗格
上添加一个填充有
径向梯度的
圆圈
,并使用
BlendMode将其与包含“地图”的
图像视图
组合。相乘

private Circle circle;

// gradient with yellow in the center and black on the border
private final static RadialGradient GRADIENT = new RadialGradient(0, 0, 0.5, 0.5, 0.5, true, CycleMethod.NO_CYCLE, new Stop(0, Color.YELLOW), new Stop(1, Color.BLACK));

private void newCircle(Pane container) {
    circle = new Circle(50, GRADIENT);
    circle.setBlendMode(BlendMode.LIGHTEN);
    circle.setManaged(false);
    container.getChildren().add(circle);
}

private void setCirclePosition(MouseEvent event) {
    circle.setCenterX(event.getX());
    circle.setCenterY(event.getY());
}

@Override
public void start(Stage primaryStage) {
    Image image = new Image(imageURL);
    ImageView imageView = new ImageView(image);

    Pane mask = new Pane();
    mask.setBlendMode(BlendMode.MULTIPLY);
    mask.setStyle("-fx-background-color: black;");
    mask.setOnMouseMoved(this::setCirclePosition); // move cricle with mouse

    newCircle(mask);

    // create new circle on mouse click
    mask.setOnMouseClicked(evt -> {
        newCircle(mask);
        setCirclePosition(evt);
    });

    StackPane root = new StackPane(imageView, mask);

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();
}