0

我正在构建的图形浏览程序遇到问题。我有两个 JavaFX 子场景,其中一个以类似于飞行模拟器的方式浏览一个非常大的图形(即图形的数学构造,而不是像折线图或饼图这样简单的东西;可能有几个千兆字节)。另一个包含一组控件,它们始终位于屏幕上的固定点。

我遇到的唯一问题是,当我尝试从主场景中获取选择结果时,它总是停在第一个子场景(平视显示器)处。我检查了 PickResult.getIntersectedNode(),肯定是 SubScene 拦截了pick。

我已经尝试过这个(可以肯定的是,在两个子场景上):

layer.setPickOnBounds(false);

但它没有任何效果。

我怀疑分层 SubScene 的某些透明部分仍在将空间划分为已占用。我不确定这一点。

如何将 SubScene 设置为不可拾取,同时保留其内容?


作为讨论的附录,这里是我(在实验中)创建的用于构建平视显示器的方法示例。这是在我将其切换为简单地返回一个窗格之前​​。(参数“fillPaint”始终设置为 Color.TRANSPARENT)。

/**
 * Creates a subscene of set parameters
 * 
 * @param scene
 *            primary scene (into which subscene is injected)
 */
private SubScene makeHeadsUpSubScene(Scene scene, Camera camera, Paint fillPaint,
        Node node) {
    Group root = new Group();

    PointLight light = new PointLight(Color.WHITE);
    light.setTranslateX(50);
    light.setTranslateY(-300);
    light.setTranslateZ(-400);
    PointLight light2 = new PointLight(Color.color(0.6, 0.3, 0.4));
    light2.setTranslateX(400);
    light2.setTranslateY(0);
    light2.setTranslateZ(-400);

    String title = "Title Stand-in";
    boolean msaa = true;

    AmbientLight ambientLight = new AmbientLight(Color.color(0.2, 0.2, 0.2));
    node.setRotationAxis(new Point3D(2, 1, 0).normalize());
    node.setTranslateX(180);
    node.setTranslateY(180);
    root.getChildren().addAll(new Label(title), ambientLight, light, light2, node);

    SubScene subScene = new SubScene(root, 640, 480, true, msaa ? SceneAntialiasing.BALANCED : SceneAntialiasing.DISABLED);
    subScene.widthProperty().bind(scene.widthProperty());
    subScene.heightProperty().bind(scene.heightProperty());
    subScene.setFill(fillPaint);
    subScene.setCamera(camera);

    return subScene;
}
4

2 回答 2

1

因此,SubScene 似乎采用了其内容的形状,通常默认为一个完整且填充的矩形。

但是,如果 SubScene 用于现场导航,则为其提供自己的摄像头;而一个简单的窗格用于单挑;可以从两者中选择。对于所有合适的面板,Pick-on-bounds 当然必须设置为 false。

于 2015-01-20T00:43:10.330 回答
0

确保setFill(null)调用subScene

使用颜色设置,即使是透明颜色,subScene如果它位于相机和场景之间,将导致被“拾取”。

于 2017-02-15T22:42:21.243 回答