JavaFX和sprite动画,如何制作动画循环以更改playerprite的图片?

问题描述 投票:0回答:1

我创建了一个DemoCharSprite对象,它扩展了Pane并保存了该角色的imageview。我在这里只使用了Pane的扩展,因为我是Javafx的新手...但是,实现精灵动画让我感到困惑。

我有一组8个png文件,展示了向北走的化身。我已将它们存储在Collection对象中。但是,我不知道我可以使用哪种数据结构,以便javafx循环遍历每个集合并更改我的DemoCharSprite窗格中的imageview,以均匀间隔和短时间显示每个精灵图片。似乎没有任何内置的Transition对象可用于按顺序显示多个图像。

有没有人知道这个的解决方法?

java animation javafx
1个回答
3
投票

您可以按如下方式使用时间表:

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();

或者,您可以将Transition子类化(这是对文档中示例的简单修改):

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();
© www.soinside.com 2019 - 2024. All rights reserved.