JavaFX 2-Animation: Pfadübergänge

Einer der auffälligsten Aspekte von JavaFX 2 ist die Animationsunterstützung. Das aufschlussreiche Erstellen von Übergängen und Zeitleistenanimationen in JavaFX behandelt die Verwendung von Übergängen und Zeitleisten in JavaFX 2. In diesem Blogbeitrag passe ich ein Beispiel in diesem Lernprogramm an, um Pfadübergänge spezifisch zu demonstrieren.

Beispiel 2 ("Pfadübergang") unter Erstellen von Übergängen und Zeitleistenanimation in JavaFX zeigt das Erstellen eines Pfads mit Klassen aus dem JavaFX 2-Paket "Formen": javafx.scene.shape.Path, javafx.scene.shape.MoveTo und javafx .scene.shape.CubicCurve. Dieses Beispiel zeigt dann die Instanziierung einer javafx.animation.PathTransition und das Anwenden eines instanziierten javafx.scene.shape.Rectangle, um sich entlang des erstellten Pfads zu bewegen.

In meiner Codeliste unten habe ich einige geringfügige Änderungen an Beispiel 2 unter Erstellen von Übergängen und Zeitleistenanimation in JavaFX vorgenommen. Ich habe speziell die sich bewegende Form von einem Rechteck in einen Kreis geändert, dem Pfad zwei "Endknöpfe" als zwei separate Kreise hinzugefügt und die Möglichkeit hinzugefügt, die Deckkraft des Pfades zusammen mit den animierten Kreisbewegungen zu ändern. Der nette Nebeneffekt bei der Verwendung einer Deckkraft von Null ist, dass der Pfad selbst nicht angezeigt wird und stattdessen so aussieht, als würde sich der Kreis frei bewegen. Ich habe versucht, jedes Hauptstück davon in eine eigene private Methode aufzuteilen, um das Erkennen der "Funktionsblöcke" zu erleichtern.

JavaFxAnimations.java

package dustin.examples; import java.util.List; import javafx.animation.PathTransition; import javafx.animation.Timeline; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.shape.*; import javafx.stage.Stage; import javafx.util.Duration; /** * Simple example demonstrating JavaFX animations. * * Slightly adapted from Example 2 ("Path Transition") which is provided in * "Creating Transitions and Timeline Animation in JavaFX" * (//docs.oracle.com/javafx/2.0/animations/jfxpub-animations.htm). * * @author Dustin */ public class JavaFxAnimations extends Application { /** * Generate Path upon which animation will occur. * * @param pathOpacity The opacity of the path representation. * @return Generated path. */ private Path generateCurvyPath(final double pathOpacity) { final Path path = new Path(); path.getElements().add(new 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); return path; } /** * Generate the path transition. * * @param shape Shape to travel along path. * @param path Path to be traveled upon. * @return PathTransition. */ private PathTransition generatePathTransition(final Shape shape, final Path path) { final PathTransition pathTransition = new PathTransition(); pathTransition.setDuration(Duration.seconds(8.0)); pathTransition.setDelay(Duration.seconds(2.0)); pathTransition.setPath(path); pathTransition.setNode(shape); pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); pathTransition.setCycleCount(Timeline.INDEFINITE); pathTransition.setAutoReverse(true); return pathTransition; } /** * Determine the path's opacity based on command-line argument if supplied * or zero by default if no numeric value provided. * * @return Opacity to use for path. */ private double determinePathOpacity() { final Parameters params = getParameters(); final List parameters = params.getRaw(); double pathOpacity = 0.0; if (!parameters.isEmpty()) { try { pathOpacity = Double.valueOf(parameters.get(0)); } catch (NumberFormatException nfe) { pathOpacity = 0.0; } } return pathOpacity; } /** * Apply animation, the subject of this class. * * @param group Group to which animation is applied. */ private void applyAnimation(final Group group) { final Circle circle = new Circle(20, 20, 15); circle.setFill(Color.DARKRED); final Path path = generateCurvyPath(determinePathOpacity()); group.getChildren().add(path); group.getChildren().add(circle); group.getChildren().add(new Circle(20, 20, 5)); group.getChildren().add(new Circle(380, 240, 5)); final PathTransition transition = generatePathTransition(circle, path); transition.play(); } /** * Start the JavaFX application * * @param stage Primary stage. * @throws Exception Exception thrown during application. */ @Override public void start(final Stage stage) throws Exception { final Group rootGroup = new Group(); final Scene scene = new Scene(rootGroup, 600, 400, Color.GHOSTWHITE); stage.setScene(scene); stage.setTitle("JavaFX 2 Animations"); stage.show(); applyAnimation(rootGroup); } /** * Main function for running JavaFX application. * * @param arguments Command-line arguments; optional first argument is the * opacity of the path to be displayed (0 effectively renders path * invisible). */ public static void main(final String[] arguments) { Application.launch(arguments); } } 

Die folgende Reihe von Bildschirmschnappschüssen zeigt dieses einfache JavaFX-Animationsbeispiel in Aktion. Sie werden in absteigender Reihenfolge (von 1,0 bis 0,0) aufgelistet.

Demonstration eines angepassten PathTransition-Beispiels (Deckkraft 1.0)

Demonstration eines angepassten PathTransition-Beispiels (Deckkraft 0,2)

Demonstration eines angepassten PathTransition-Beispiels (Deckkraft 0,05)

Demonstration eines angepassten PathTransition-Beispiels (Deckkraft 0.0)

Jeder der obigen Bildschirmschnappschüsse wurde erstellt, nachdem die Anwendung mit dem angegebenen Befehlszeilenargument (1, 0,2, 0,05 und 0) ausgeführt wurde.

Dieses angepasste Beispiel hat gezeigt, PathTransitionwie die Bewegung eines Knotens entlang des vorgeschriebenen Pfades animiert wird (ich habe bereits über die Verwendung von Pfad und einiger seiner Alternativen gebloggt). Entwickler können ihre eigene Ableitung von Transition implementieren, und es werden auch andere bereitgestellte Übergänge unterstützt (z. B. FadeTransition, ParallelTransition und SequentialTransition).

Es ist ein unkomplizierter Vorgang, schnell mit der Anwendung der JavaFX 2-Animation mithilfe der bereitgestellten Transition-Klassen zu beginnen.

Originalbeitrag verfügbar unter //marxsoftware.blogspot.com/ (Inspiriert von tatsächlichen Ereignissen)

Diese Geschichte "JavaFX 2 Animation: Pfadübergänge" wurde ursprünglich von JavaWorld veröffentlicht.