猿问

如何将 SceneAntialiasing 设置为在 FXML 文件中创建的 SubScene?

我一直在 JavaFX 中玩 3D。


我在我的演示应用程序中添加了SubScene一些Box,但它们的边缘Box很脏。如何在不在SceneAntialiasing.BALANCED构造函数中使用的情况下平滑它们?我已经看到有可能添加antiAliasing=""到 FXML 文件中,但是我不知道应该将什么作为参数。WordBALANCED不工作。


Controller.java


import javafx.animation.KeyFrame;

import javafx.animation.KeyValue;

import javafx.animation.Timeline;

import javafx.fxml.FXML;

import javafx.scene.*;

import javafx.scene.layout.AnchorPane;

import javafx.scene.paint.Color;

import javafx.scene.paint.PhongMaterial;

import javafx.scene.shape.Box;

import javafx.scene.transform.Rotate;

import javafx.scene.transform.Translate;

import javafx.util.Duration;



public class Controller{


    @FXML

    private SubScene subscene;

    @FXML

    private AnchorPane pane;

    private Box box= new Box();

    private PerspectiveCamera camera = new PerspectiveCamera(true);

    private Group group = new Group();



    final Rotate rx = new Rotate(0, Rotate.X_AXIS);

    final Rotate ry = new Rotate(0, Rotate.Y_AXIS);

    final Rotate rz = new Rotate(0, Rotate.Z_AXIS);

    private Timeline animation;




    @FXML

    void initialize() {


        box.setMaterial(new PhongMaterial(Color.ORANGE));

        box.setDepth(10);

        box.setWidth(10);

        box.setHeight(10);

        rx.setAngle(90);

        ry.setAngle(25);

        box.getTransforms().addAll(rz, ry, rx);



        group.getChildren().add(box);


        animation = new Timeline();

        animation.getKeyFrames().addAll(

                new KeyFrame(Duration.ZERO,


                        new KeyValue(box.depthProperty(), 0d),

                        new KeyValue(box.translateYProperty(),400d)),

                new KeyFrame(Duration.seconds(5),


                        new KeyValue(box.depthProperty(), 800d),

                        new KeyValue(box.translateYProperty(), 0d)));


        animation.setCycleCount(Timeline.INDEFINITE);



        camera.getTransforms().add(new Translate(0, 0, -80));

        camera.getTransforms().addAll (


                new Rotate(-35, Rotate.X_AXIS),

                new Translate(0, 0, 10)


    }


}


还有其他方法可以实现吗?


qq_花开花谢_0
浏览 102回答 1
1回答

冉冉说

由于SceneAntialiasing不是枚举,因此不能在属性中使用常量名称。但是,SubScene构造函数确实使用 注释SceneAntialiasing参数@NamedArg,这意味着它可以在通过 FXML 创建时注入。您只需要结合使用一个元素而fx:constant不是一个属性。例如:<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.SubScene?><?import javafx.scene.SceneAntialiasing?><SubScene xmlns="http://javafx.com/javafx/12.0.1" xmlns:fx="http://javafx.com/fxml/1">&nbsp; &nbsp; <antiAliasing>&nbsp; &nbsp; &nbsp; &nbsp; <SceneAntialiasing fx:constant="BALANCED"/>&nbsp; &nbsp; </antiAliasing></SubScene>加载上面的内容:import java.io.IOException;import javafx.application.Application;import javafx.application.Platform;import javafx.fxml.FXMLLoader;import javafx.scene.SubScene;import javafx.stage.Stage;public final class App extends Application {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void start(Stage primaryStage) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; SubScene scene = FXMLLoader.load(getClass().getResource(...));&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(scene.getAntiAliasing());&nbsp; &nbsp; &nbsp; &nbsp; Platform.exit();&nbsp; &nbsp; }}结果被BALANCED打印出来。
随时随地看视频慕课网APP

相关分类

Java
我要回答