Programování

Animace JavaFX 2: Path Transitions

Jedním z nejžhavějších aspektů JavaFX 2 je podpora animací. Insightful Creating Transitions and Timeline Animation in JavaFX covers using both Transitions and Timelines in JavaFX 2. V tomto příspěvku na blogu upravuji příklad uvedený v tomto tutoriálu, abych konkrétně demonstroval Path Transitions.

Příklad 2 („Přechod cesty“) zobrazený v části Vytváření přechodů a animace časové osy v prostředí JavaFX ukazuje vytvoření cesty s třídami z balíčku „tvarů“ JavaFX 2: javafx.scene.shape.Path, javafx.scene.shape.MoveTo a javafx .scene.shape.CubicCurve. Tento příklad pak demonstruje vytvoření instance javafx.animation.PathTransition a použití instancovaného javafx.scene.shape.Rectangle pro pohyb po vytvořené cestě.

V níže uvedeném výpisu kódu jsem provedl několik drobných změn v příkladu 2 v Vytváření přechodů a animace časové osy v JavaFX. Konkrétně jsem změnil pohybující se tvar z obdélníku na Kruh, přidal jsem k cestě dva „koncové knoflíky“ jako dva samostatné kruhy a přidal jsem schopnost změnit neprůhlednost cesty spolu s animovanými pohyby kružnic. Pěkným vedlejším účinkem použití nulové neprůhlednosti je to, že samotná cesta se neobjeví a místo toho vypadá, že se kruh volně pohybuje. Snažil jsem se rozdělit každý hlavní kousek do své vlastní soukromé metody, aby bylo snazší vidět „kousky“ funkčnosti.

JavaFxAnimations.java

příklady zásilky; import java.util.List; import javafx.animation.PathTransition; import javafx.animation.Timeline; import javafx.application.Application; importovat javafx.scene.Group; importovat javafx.scene.Scene; import javafx.scene.paint.Color; importovat javafx.scene.shape. *; importovat javafx.stage.Stage; import javafx.util.Duration; / ** * Jednoduchý příklad demonstrace animací JavaFX. * * Mírně upraveno z příkladu 2 („Přechod cesty“), který je uveden v * „Vytváření přechodů a animace časové osy v JavaFX“ * (//docs.oracle.com/javafx/2.0/animations/jfxpub-animations.htm). * * @author Dustin * / veřejná třída JavaFxAnimations rozšiřuje aplikaci {/ ** * Generovat cestu, po které dojde k animaci. * * @param pathOpacity Neprůhlednost reprezentace cesty. * @return Generovaná cesta. * / private Path generateCurvyPath (final double pathOpacity) {final Path path = new Path (); path.getElements (). add (nový MoveTo (20,20)); path.getElements (). add (new CubicCurveTo (380, 0, 380, 120, 200, 120)); path.getElements (). add (new CubicCurveTo (0, 120, 0, 240, 380, 240)); path.setOpacity (pathOpacity); zpáteční cesta; } / ** * Generovat přechod cesty. * * @param tvar Tvar pro cestování po cestě. * @param path Cesta, po které musíte cestovat. * @return PathTransition. * / private PathTransition generatePathTransition (konečný tvarový tvar, konečná cesta cesty) {final PathTransition pathTransition = new PathTransition (); pathTransition.setDuration (Duration.seconds (8.0)); pathTransition.setDelay (Duration.seconds (2.0)); pathTransition.setPath (cesta); pathTransition.setNode (shape); pathTransition.setOrientation (PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); pathTransition.setCycleCount (Timeline.INDEFINITE); pathTransition.setAutoReverse (true); návratová cestaTransition; } / ** * Určete neprůhlednost cesty na základě argumentu příkazového řádku, pokud je zadán * nebo ve výchozím nastavení nula, pokud není uvedena číselná hodnota. * * @return Opacity to use for path. * / private double determinePathOpacity () {final Parameters params = getParameters (); konečné parametry seznamu = params.getRaw (); double pathOpacity = 0,0; if (! parameters.isEmpty ()) {try {pathOpacity = Double.valueOf (parameters.get (0)); } catch (NumberFormatException nfe) {pathOpacity = 0,0; }} return pathOpacity; } / ** * Použít animaci, předmět této třídy. * * @param group Skupina, na kterou se použije animace. * / private void applyAnimation (konečná skupina Group) {final Circle circle = new Circle (20, 20, 15); circle.setFill (Color.DARKRED); final Path path = generateCurvyPath (determinePathOpacity ()); group.getChildren (). add (cesta); group.getChildren (). add (kruh); group.getChildren (). add (nový kruh (20, 20, 5)); group.getChildren (). add (nový kruh (380, 240, 5)); finální přechod PathTransition = generatePathTransition (kruh, cesta); transition.play (); } / ** * Spusťte aplikaci JavaFX * * @param stage Primární fáze. * @throws Exception Výjimka vyvolána během aplikace. * / @Override public void start (final stage stage) throws Exception {final Group rootGroup = new Group (); závěrečná scéna scény = nová scéna (rootGroup, 600, 400, Color.GHOSTWHITE); stage.setScene (scéna); stage.setTitle ("Animace JavaFX 2"); stage.show (); applyAnimation (rootGroup); } / ** * Hlavní funkce pro spuštění aplikace JavaFX. * * @param arguments Argumenty příkazového řádku; volitelným prvním argumentem je * neprůhlednost cesty, která se má zobrazit (0 efektivně způsobí, že cesta * bude neviditelná). * / public static void main (final String [] argumenty) {Application.launch (argumenty); }} 

Následující série snímků obrazovky ukazuje tento jednoduchý příklad animace JavaFX v akci. Jsou uvedeny v pořadí sestupné neprůhlednosti (od 1,0 do 0,0).

Ukázka přizpůsobeného příkladu přechodu cesty (neprůhlednost 1,0)

Ukázka přizpůsobeného příkladu přechodu cesty (neprůhlednost 0,2)

Ukázka přizpůsobeného příkladu přechodu cesty (neprůhlednost 0,05)

Ukázka přizpůsobeného příkladu přechodu cesty (neprůhlednost 0,0)

Každý z výše uvedených snímků obrazovky byl pořízen po spuštění aplikace se zadaným argumentem příkazového řádku (1, 0,2, 0,05 a 0).

Tento přizpůsobený příklad prokázal použití PathTransition animovat pohyb uzlu po předepsané cestě (blogoval jsem o použití Path a některých jeho alternativ dříve). Vývojáři mohou implementovat vlastní derivát Transition a jsou podporovány také další dodané přechody (například FadeTransition, ParallelTransition a SequentialTransition).

Jedná se o přímý proces, jak rychle začít používat animaci JavaFX 2 pomocí poskytnutých tříd Přechodu.

Původní příspěvky jsou k dispozici na //marxsoftware.blogspot.com/ (inspirováno skutečnými událostmi)

Tento příběh, „JavaFX 2 Animation: Path Transitions“, byl původně publikován společností JavaWorld.