【问题标题】:Listen for transformation changes监听转换变化
【发布时间】:2015-10-23 07:16:37
【问题描述】:

有没有办法监听转换变化?例如,当立方体转动时,我想得到通知。特别是我对getLocalToSceneTransform感兴趣。

这是我的尝试:

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

    final Box cube = new Box(1, 1, 1);
    cube.setRotationAxis(Rotate.Y_AXIS);
    cube.setMaterial(new PhongMaterial(Color.RED));
    root.getChildren().add(cube);
    cube.getLocalToSceneTransform().addEventHandler(TransformChangedEvent.TRANSFORM_CHANGED, (e) -> {
        // never get called
        System.out.println("Transformation has changed");
    });

    final Camera camera = new PerspectiveCamera(true);
    camera.setTranslateZ(-4);
    scene.setCamera(camera);

    final Timeline turnCube = new Timeline();
    turnCube.getKeyFrames().add(new KeyFrame(Duration.seconds(0), new KeyValue(cube.rotateProperty(), 0)));
    turnCube.getKeyFrames().add(new KeyFrame(Duration.seconds(5), new KeyValue(cube.rotateProperty(), 360)));
    turnCube.setCycleCount(Timeline.INDEFINITE);
    turnCube.play();

    primaryStage.setWidth(1024);
    primaryStage.setHeight(768);
    primaryStage.setScene(scene);
    primaryStage.show();
}

当立方体转动时,EventHandler 永远不会被调用。

【问题讨论】:

    标签: java javafx javafx-3d


    【解决方案1】:

    您可以向多维数据集的localToSceneTransformProperty() 添加一个changeListener,以便在多维数据集旋转时收到通知。

    cube.localToSceneTransformProperty().addListener((value, oldValue, newValue) -> {
         System.out.println("Transformation has changed");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2011-11-27
      • 2023-04-07
      • 2021-04-15
      相关资源
      最近更新 更多