如何在JavaFX中为两个节点之间的2D曲线箭头设置动画

如何在JavaFX中为两个节点之间的2D曲线箭头设置动画,java,animation,javafx-2,shape,java-2d,Java,Animation,Javafx 2,Shape,Java 2d,在我的项目中,我正在处理SVGPaths(从Shape类扩展而来),此外,我还试图改进自己在JavaFX中的动画。问题是,我想在两个节点之间创建2D弯曲箭头动画。在这里,您可以看到我的地图示例,其中包括国家(换句话说,节点/形状),以便您更清楚地了解 所以,考虑到每当鼠标光标在节点上时,2D箭头就会启动动画指向邻居国家。箭头看起来像这样 我研究了互联网,阅读了一些关于JavaFX动画的教程,但找不到清晰的东西。无论如何,我会感谢你的每一个回答和感谢 编辑:最后我实现了一个关于在两个矩形的中点

在我的项目中,我正在处理SVGPaths(从Shape类扩展而来),此外,我还试图改进自己在JavaFX中的动画。问题是,我想在两个节点之间创建2D弯曲箭头动画。在这里,您可以看到我的地图示例,其中包括国家(换句话说,节点/形状),以便您更清楚地了解

所以,考虑到每当鼠标光标在节点上时,2D箭头就会启动动画指向邻居国家。箭头看起来像这样

我研究了互联网,阅读了一些关于JavaFX动画的教程,但找不到清晰的东西。无论如何,我会感谢你的每一个回答和感谢

编辑:最后我实现了一个关于在两个矩形的中点之间旋转箭头的适当动画。这里是简单的源代码

Rectangle rect1 = new Rectangle(71, 64, 31, 21); // Create first rectangle
Rectangle rect2 = new Rectangle(158, 64, 35, 21); // Create second rectangle

rect1.setVisible(false);
rect2.setVisible(false);

worldMap.getChildren().add(rect1); // add both of them in to the Group Layout
worldMap.getChildren().add(rect2);

Path path = new Path(); // Create the oath object which arrow will rotate on

MoveTo moveTo = new MoveTo();

moveTo.setX( rect1.getX()+ (rect1.getWidth()/2) );
moveTo.setY( rect1.getY()+ (rect1.getHeight()/2) );

QuadCurveTo quadCurveTo = new QuadCurveTo(); 

quadCurveTo.setX( rect2.getX()+(rect2.getWidth()/2) );
quadCurveTo.setY( rect2.getY()+(rect2.getHeight()/2) );
quadCurveTo.setControlX( ( rect1.getX()+rect2.getX() ) /2 );
quadCurveTo.setControlY( ( rect1.getY()-50) );

path.getElements().add(moveTo);
path.getElements().add(quadCurveTo);
path.setStrokeWidth(3); 
path.setStroke(Color.BLACK);
path.setMouseTransparent(true);

final Polygon arrow = new Polygon(); // Create arrow

arrow.getPoints().addAll(new Double[] {50.0,50.0,70.0,50.0,70.0,42.0,82.0,54.0,70.0,66.0,70.0,58.0,50.0,58.0});
arrow.setFill(Color.GREEN);

PathTransition pathTransition = new PathTransition(); //

pathTransition.setDuration(Duration.millis(750));
pathTransition.setPath(path);
pathTransition.setNode(arrow);
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
pathTransition.setCycleCount(Timeline.INDEFINITE);
pathTransition.setAutoReverse(true);
pathTransition.play();

现在我想创建一个动画,它提供箭头从起点开始延伸到终点。

JavaFX2D/3D非常适合使用JDK 8

阅读中的示例

下载的jkd8包括3D


请不要把我的评论误认为是“拖拉”——是什么让你决定在这个项目中使用JavaFX?早在08年JavaOne发布之后,我就很少听到关于它的消息(是09年吗?)。你是在做网络还是机顶盒(Java TV)项目?不是。事实上,我正在执行一个棋盘游戏,我们称之为“风险”,也许你听说过。在开始人工智能部分之前,我开始实现用户界面部分。我使用一个SVG文件来实现从.fxml文件解析的世界地图。因此.fxml和svg文件就是我开始用JavaFX编写这个游戏的原因。JavaFX可以以本机方式显示动画GIF(如在您的问题帖子中)-
ImageView-ImageView=new-ImageView(new-Image(“http://i.stack.imgur.com/cVtz0.gif"));
,或者您可能正在使用请求一些不同的内容?我已经在JFX中查看了可用动画的列表,似乎您必须更改您的想法=)我建议创建一个移动箭头。箭头从开始到结束。一次又一次。这将是一个路径转换。可能是沿着这条线的几个箭头。。。或者一支箭,从起点跳到终点它的工作原理是:创建一个动画,并使节点可见,只有当鼠标位于上方时才可见。@sea基本上,我考虑过这种方法,但我认为它看起来可能有点业余:D。而且每个节点的角度也会有所不同。有没有办法调整这个.gif文件的大小(在角度上播放)?遗憾的是,完整的JDK 8版本要到2014年才会发布(它被推迟到2013年9月的初始日期后的6个月)