JavaFX2D、3D、SVG形状

JavaFX2D、3D、SVG形状,java,javafx,fxml,Java,Javafx,Fxml,我有一个关于下图的一般性问题。我对如何使用JavaFX创建这样一个组件感到有点困惑。下面船舶图形的每个部分作为按钮本身也会动态变化为:“尺寸、颜色等” 我不确定这是否可以通过SVG路径或2D对象动态创建,或者最好使用文件2D-3D文件类型,如(“.obj、.stl…等”)。 如果有人曾经遇到过这种情况,欢迎留下答案和意见进行讨论。回答澄清者 当我第一次阅读你的问题时,我认为这是关于在你的问题中挑选或选择图像的一部分,但也许不是,而且只是关于如何表示和绘制对象,而不是与对象的一部分交互。如果不需要

我有一个关于下图的一般性问题。我对如何使用JavaFX创建这样一个组件感到有点困惑。下面船舶图形的每个部分作为按钮本身也会动态变化为:“尺寸、颜色等”

我不确定这是否可以通过SVG路径或2D对象动态创建,或者最好使用文件2D-3D文件类型,如(“.obj、.stl…等”)。
如果有人曾经遇到过这种情况,欢迎留下答案和意见进行讨论。

回答澄清者

当我第一次阅读你的问题时,我认为这是关于在你的问题中挑选或选择图像的一部分,但也许不是,而且只是关于如何表示和绘制对象,而不是与对象的一部分交互。如果不需要交互,可以忽略答案的拾取部分,只查看形状表示部分

挑选

有多种方法可以实现所描述的结果。您试图实现的技术术语是“拾取”,但除了拾取之外,还有很多事情可能会影响您表示对象的方式,以及您使用的是2D还是3D系统,甚至JavaFX是否是最适合您的应用程序的框架。你可能需要一个3D系统,或者2D系统在你的情况下就足够了(我不知道)

有关资料:

PickResult

链接拣选文章中的示例处理程序:

EventHandler<MouseEvent> moveHandler = new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            PickResult res = event.getPickResult();
            // do something with the pick result.
            event.consume();
        }
}
EventHandler moveHandler=neweventhandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
PickResult res=event.getPickResult();
//对拾取结果执行一些操作。
event.consume();
}
}
那篇采摘的文章用了一个字母。PickResult可以解释二维和三维信息。对于二维信息,通常仅拾取的节点相关。在3D拾取的情况下,它提供额外的信息,例如纹理坐标和拾取的3D面

方便的方法,如
设置鼠标点击

通常在2D中,您不需要太多额外的信息,除了已选择的节点之外。在这种情况下,您不需要查询和查看PickResult中的所有信息。您可以使用进行用户交互处理,例如。在所有节点上设置一个单击处理程序,您将能够在单击每个节点时通过其相关的单击处理程序对其进行操作(类似于按钮的功能)

对于不规则形状,您可能希望确保您具有。另外请注意,如果“边界拾取”为false,并且希望在不规则形状内单击以注册,则形状的内部必须填充颜色(与图片中不同)。如有必要,颜色可以是半透明的,但不能完全透明。这是因为如果你没有任何东西可以点击,点击将不会注册

悬停绑定

有关在节点的悬停属性更改状态时采取操作的示例,请参见smurf对此问题的回答

实施自己的命中测试

当场景图中有节点时,可以使用JavaFX内置的系统进行拾取关联

另一种方法是在不使用场景图的情况下在场景中渲染图像,然后实现自己的命中测试算法并使用该算法。这就是垃圾神对以下问题的回答中所说明的解决方案:

如果使用渲染器在画布中渲染复杂的重叠形状,这可能会变得复杂。因此,我建议使用2D或3D形状的场景图,而不是使用画布来完成此任务

形状表示法

您可以这样做的示例方法:

  • 二维图像的集合
  • 二维图像的集合
选择哪种表示取决于应用程序,因为有些表示更适合不同的用途。对于您在问题中显示的图像,如果您似乎具有不同的相同对象,则使用渲染器在二维平面上渲染三维表示可能是最好的。对于许多其他应用程序,位图2D图像是最好的

若要表示不规则的二维形状,如果您有适当的路径信息,则可以使用。如果您没有适当的路径信息,那么使用2D系统来表示一组复杂的图像将是一个挑战,就像您在问题中遇到的那样(即使使用路径信息,也可能是一个挑战)

形状表示的另一个选项是从位图文件(如PNG)中读取的
图像
s,该文件具有透明背景,允许不规则形状

旁白

这个问题可能会因为不够集中而结束,因为这正是像这样的问题所发生的。同样,这个答案在范围上更为一般,而不是具体,特别是,它没有为您提供完整的代码(或者实际上根本没有任何代码)来实现您在问题中概述的问题的解决方案。

检查了一种技术。