JavaFX et sprite animation, comment faire un cycle d'animation pour changer les images de mes playersprite?


J'ai créé un objet DemoCharSprite qui étend le volet et contient une vue d'image du caractère. Je n'ai utilisé l'extension de Pane ici que parce que je suis novice en Javafx... Cependant, la mise en œuvre d'animations sprite me confond.

J'ai un ensemble de 8 fichiers png qui présentent un avatar marchant vers le nord. Je les ai stockés dans un objet de collection. Cependant, je ne sais pas quelle structure de données je pourrais utiliser pour que javafx boucle chaque collection et modifie l'imageview dans mon volet DemoCharSprite pour afficher chaque image sprite dans un intervalle de temps régulier et court. Il ne semble pas y avoir d'objets de transition intégrés qui pourraient être utilisés pour afficher plusieurs images dans un ordre séquentiel.

Quelqu'un connaît-il une solution de contournement pour cela?

Author: Byron Smith, 2017-12-19

1 answers

Vous pouvez utiliser une chronologie comme suit:

private int imageIndex = 0 ;
private final int frameTime = ... ; // milliseconds

// ...

ImageView imageView = new ImageView();
List<Image> images = new ArrayList<>();
// populate images...

Timeline timeline = new Timeline(new KeyEvent(Duration.millis(frameTime),
    e -> imageView.setImage(images.get(imageIndex++))));

timeline.setCycleCount(images.size());
timeline.play();

Alternativement, vous pouvez simplement sous-classe Transition (ceci est une adaptation simple de l'exemple dans la documentation):

ImageView imageView = new ImageView();
List<Image> images = new ArrayList<>();
// populate images...

Transition animation = new Transition() {
    {
        setCycleDuration(Duration.millis(1000)); // total time for animation
    }

    @Override
    protected void interpolate(double fraction) {
        int index = (int) (fraction*(images.size()-1));
        imageView.setImage(images.get(index)); 
    }
}
animation.play();
 2
Author: James_D, 2017-12-18 21:37:05