JavaFX-eksempel - bruk av TimeLine og Animation

Javafx Example Use Timeline



Arbeidet i disse to dagene var veldig travelt. På grunn av den endelige utgivelsen av et prosjekt på Android-nettbrettet, jobbet jeg overtid til klokka 11 natten før, og jobbet overtid til klokka fire om morgenen. Så den forrige siden av Sourceforge ble også laget. På grunn av den endelige utgivelsen av prosjektet er det imidlertid lettere i dag, og jeg har skrevet flere eksempler på JavaFX.








Ovennevnte er et enkelt eksempel.

Eksempel på demo-adresse: http://wjfxgame.sourceforge.net/examples/exp1/AniTest.html




Klikk Start for å starte animasjonen.


Hovedsakelig anvendelsen av tidslinje og animasjon i JavaFX.

Tidslinjen har blitt brukt mange steder i tidligere blogginnlegg. Det er også en tidslinje og deretter animert ved å legge til nøkkelbilder.


Og animasjon, hovedsakelig for å animere Node. Animasjoner i JavaFX er i pakken javafx.animation. Animasjon har to underklasser, tidslinje og overgang. Med andre ord, i henhold til det hierarkiske forholdet i API, er tidslinjen en slags animasjon.


Selvfølgelig trenger vi ikke å vikle tidslinjen og animasjonen i tittelen.


Overgang har 10 underklasser: FadeTransition, FillTransition, ParallelTransition, PathTransition, PauseTransition, RotateTransition, ScaleTransition, SequentialTransition, StrokeTransition, TranslateTransition.


Faktisk, selv om det er mange underklasser, kan de grunnleggende effektene av animasjon vurderes i henhold til navngivningsprefikset. I utgangspunktet endres Node-egenskapen, som kantfarge, fyllfarge, gjennomsiktighet, zoom, roter, panorer, flytt og pause etter sti.


Only ParallelTransition er en parallell animasjon (en serie animasjoner utføres samtidig), og SequentialTransition er en sekvensiell animasjon (en serie animasjoner utføres sekvensielt).


La oss ta en titt på kildekoden:

import javafx.animation.* import javafx.event.ActionEvent import javafx.event.EventHandler import javafx.scene.control.ToggleButton import javafx.scene.control.ToggleGroup import javafx.scene.effect.Bloom import javafx.scene.layout.HBox import javafx.scene.layout.Pane import javafx.scene.paint.Color import javafx.scene.shape.* import javafx.util.Duration /** * * @author wing */ public class TestPane extends Pane{ private ParallelTransition mAnimList private Timeline timeline private HBox hBox private ToggleButton start, pause, stop private ToggleGroup btnGroup private double duration = 200 public TestPane(){ btnGroup = new ToggleGroup() start = new ToggleButton('Start') start.setToggleGroup(btnGroup) start.setOnAction(new EventHandler() { @Override public void handle(ActionEvent arg0) { timeline.play() checkUIState() } }) pause = new ToggleButton('Pause') pause.setToggleGroup(btnGroup) pause.setOnAction(new EventHandler() { @Override public void handle(ActionEvent arg0) { timeline.pause() checkUIState() } }) stop = new ToggleButton('Stop') stop.setToggleGroup(btnGroup) stop.setOnAction(new EventHandler() { @Override public void handle(ActionEvent arg0) { timeline.stop() checkUIState() } }) hBox = new HBox(10) hBox.getChildren().addAll(start, pause, stop) hBox.setTranslateX((Anitest.WIDTH - 200) / 2) hBox.setTranslateY(20) getChildren().add(hBox) timeline = new Timeline() timeline.setCycleCount(Timeline.INDEFINITE) KeyFrame keyFrame = new KeyFrame(Duration.millis(duration), new EventHandler() { @Override public void handle(ActionEvent event) { createObject() } }) timeline.getKeyFrames().add(keyFrame) } /** * Check the status of the three buttons start pause stop */ public void checkUIState(){ start.setDisable(false) pause.setDisable(false) stop.setDisable(false) switch(timeline.getStatus()){ case RUNNING: start.setDisable(true) break case PAUSED: pause.setDisable(true) break case STOPPED: stop.setDisable(true) break } } /** * Create an Object and perform animation, create a ParallelTransition here, and add a TranslateTransition with random left and right translations, a FadeTransition with transparency gradually becoming 0 and a ScaleTransition gradually magnifying 0.2 times. Bind the Object you just created to the ParallelTransition that combines the three animations, and then execute ParallelTransition. */ public void createObject() { double width = Math.max(50, Math.random() * 200) double height = Math.max(50, Math.random() * 200) double x = Math.min(Math.random() * Anitest.WIDTH, Anitest.WIDTH - width) double y = Math.max(Math.random() * (Anitest.HEIGHT - 100), 100) double dx = Math.random() * 50 double dy = Math.random() * 50 final Shape shape = new Circle(x, y, width / 2) shape.setEffect(new Bloom(50)) shape.setFill(Color.rgb((int) (Math.random() * 255), (int) (Math.random() * 255), (int) (Math.random() * 255))) getChildren().add(shape) mAnimList = new ParallelTransition( shape, TranslateTransitionBuilder.create().byX(Math.random() > 0.5 ? dx : -dx).byY(Math.random() > 0.5 ? dy : -dy).duration(Duration.millis(1000)).build(), FadeTransitionBuilder.create().toValue(0).duration(Duration.millis(1000)).build(), ScaleTransitionBuilder.create().byX(0.2).byY(0.2).duration(Duration.millis(800)).build()) mAnimList.play() mAnimList.setOnFinished(new EventHandler() { @Override public void handle(ActionEvent arg0) { getChildren().remove(shape) } }) } }


Og på slutten av animasjonen fjernes nettopp opprettet objekt.


Overgangene her er opprettet med sine respektive utbyggere.


Når det gjelder hvorfor Pane arves her, vil hovedsakelig disse eksemplene legges til Sourceforge-hjemmesiden, som vil bli brukt i den appen.


Her er hovedklassen:

import javafx.application.Application import javafx.scene.Scene import javafx.scene.layout.StackPane import javafx.scene.paint.Color import javafx.stage.Stage /** * @author wing * 2012/8/30 */ public class Anitest extends Application { public static final int WIDTH = 800 public static final int HEIGHT = 600 public static void main(String[] args) { launch(args) } @Override public void start(Stage primaryStage) { TestPane mPane = new TestPane() StackPane root = new StackPane() root.getChildren().add(mPane) Scene scene = new Scene(root, WIDTH, HEIGHT) scene.setFill(Color.BLACK) primaryStage.setScene(scene) primaryStage.setTitle('JavaFX example - use of TimeLine and Animation') primaryStage.show() } }

Hovedklassen er ikke forklart, det er veldig grunnleggende innhold.


Oppgi kilden: http://blog.csdn.net/ml3947/

-------------------------------------------------- -------

Opprinnelig prøvde jeg å legge inn en applet i et blogginnlegg, jeg prøvde den lenge uten å lykkes, men jeg så den innebygd i en ku-blogg som jeg hadde vært oppmerksom på før. Jeg føler meg rar. Klar til å se senere.


Så jeg ga adressen til demoen direkte. Hvis systemet ikke har JavaFX installert, bør du bli bedt om å installere en ny versjon av Java. Fordi JavaFX allerede er inkludert i JRE7.