In Java FX 8 heb ik een Path gecreëerd, waarbij elk PathElement is gebonden aan een ankerpunt. Als ik nu een translatie toepas op één van de ankerpunten, dan verandert de vorm van het pad (dit werkt goed
).
Nu wil ik een animatie over het eerder genoemde pad maken: dmv een PathTransition zou een rechthoek ("Target Object") over het pad moeten bewegen. Ook dit werkt prima. Echter, als ik, zodra de animatie loopt, een translatie toepas op één van de ankerpunten, dan verandert het pad wel van vorm, maar de rechthoek vliegt van zijn pad af! Ik heb geen idee hoe ik dit kan fixen. Ik kan niet de animatie opnieuw starten; of alleszins, de animatie zou op dezelfde plek moeten doorgaan.
In code ziet het er als volgt uit:
Is er misschien een bind die ik op de rechthoek moet toepassen?
Nu wil ik een animatie over het eerder genoemde pad maken: dmv een PathTransition zou een rechthoek ("Target Object") over het pad moeten bewegen. Ook dit werkt prima. Echter, als ik, zodra de animatie loopt, een translatie toepas op één van de ankerpunten, dan verandert het pad wel van vorm, maar de rechthoek vliegt van zijn pad af! Ik heb geen idee hoe ik dit kan fixen. Ik kan niet de animatie opnieuw starten; of alleszins, de animatie zou op dezelfde plek moeten doorgaan.
In code ziet het er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| //Create a path through a number of 'routing nodes' Path path=new Path(); MoveTo moveTo = new MoveTo(); moveTo.xProperty().bind(getAnchorPoint(startOfPath).layoutXProperty().add(baseLayer.getAnchorPoint(startOfPath).translateXProperty())); moveTo.yProperty().bind(getAnchorPoint(startOfPath).layoutYProperty().add(baseLayer.getAnchorPoint(startOfPath).translateYProperty())); path.getElements().add(moveTo); for(RoutingNode routingNode : routingNodes){ //Draw the path through all routing nodes LineTo lineTo = new LineTo(); lineTo.xProperty().bind(getAnchorPoint(routingNode).layoutXProperty().add(getAnchorPoint(routingNode).translateXProperty())); lineTo.yProperty().bind(getAnchorPoint(routingNode).layoutYProperty().add(getAnchorPoint(routingNode).translateYProperty())); path.getElements().add(lineTo); } path.getElements().add(new ClosePath()); getChildren().add(path); //Create the target object which moves over the line Rectangle rect = new Rectangle (0, 0, 20, 20); rect.setTranslateX(getAnchorPoint(startOfPath).getTranslateX()); rect.setTranslateY(getAnchorPoint(startOfPath).getTranslateY()); getChildren().add(rect); //Create the animation PathTransition pathTransition = new PathTransition(); pathTransition.setDuration(10); pathTransition.setPath(path); pathTransition.setNode(rect); pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); pathTransition.setCycleCount(1); pathTransition.play(); |
Is er misschien een bind die ik op de rechthoek moet toepassen?