繁体   English   中英

JavaFX和精灵动画,如何制作动画循环来更改播放器精灵的图片?

[英]JavaFX and sprite animation, how do I make an animation cycle to change pictures of my playersprite?

我创建了一个DemoCharSprite对象,该对象扩展了Pane并保存了角色的imageview。 我在这里只使用Pane的扩展名,因为我对Javafx不熟悉。但是,实现sprite动画会使我感到困惑。

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

有谁知道解决方法?

您可以使用以下时间轴:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM