Ich möchte Schrittbewegungen von zwei Schuhen (ImageView) so animieren das sie einen Schritt nach den anderen setzen. Ich habe mir dafür die Timeline Funktionen ausgesucht. Dabei habe ich ein Probleme:
Da Timeline nicht die Positionen der ImageViews verändert, mache ich dies am Ende der Timeline mit .setOnFinished und einen EventHändler. Dabei sieht es so aus, als ob die Bewegung der Timeline kürzer ist als die danach gesetzte Position (es erfolgt eine ruckartige Bewegung) .
Wie kann ich das vermeiden?
Der Code:
Da Timeline nicht die Positionen der ImageViews verändert, mache ich dies am Ende der Timeline mit .setOnFinished und einen EventHändler. Dabei sieht es so aus, als ob die Bewegung der Timeline kürzer ist als die danach gesetzte Position (es erfolgt eine ruckartige Bewegung) .
Wie kann ich das vermeiden?
Der Code:
Java:
/**************************************************
* Eine Schrittfolge links, rechts, links animieren
*/
public void walkOn() {
makeOneStep(app.schuhOL, 0, -10, 500, 0); //linker Schritt
makeOneStep(app.schuhOR, 0, -20, 1000, 500); //rechter Schritt
makeOneStep(app.schuhOL, 0, -20, 1000, 1000); //linker Schritt
} //end walkOn *****************************************************
/**************************
* Eine Schritt durchführen
*
* @param imgV
* @param x
* @param y
* @param dur : Durchlaufzeit
* @param del : Wartezeit bis Start
*/
private void makeOneStep(ImageView imgV, double x, double y, int dur,
int del) {
KeyValue kvX = new KeyValue(imgV.translateXProperty(), x);
KeyValue kvY = new KeyValue(imgV.translateYProperty(), y);
KeyFrame kf = new KeyFrame(Duration.millis(dur), kvX, kvY);
Timeline tl = new Timeline(kf);
tl.setCycleCount(1);
tl.setAutoReverse(false);
tl.setDelay(Duration.millis(del));
tl.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
imgV.setX(imgV.getX() + x); //Bewegung im ImageView nachvollziehen
imgV.setY(imgV.getY() + y);
}
});
tl.playFromStart();
} //end makeOneStep *************************************************