我希望使用ImageView作为图像的容器来显示精灵动画,并使用TimeLine来切换图像视图中的图像:
private ImageView imgView;
...
public void init(Image[] images) {
this.imgView = new ImageView(images[0]);
Timeline timeLine = new Timeline();
Collection<KeyFrame> frames = timeLine.getKeyFrames();
for (Image img : images)
frames.add(new KeyFrame(Duration.millis(256), e -> imgView.setImage(img)));
timeLine.setCycleCount(Timeline.INDEFINITE);
timeLine.play();
}
ImageView已渲染,但卡在动画的某些图像上(甚至不是第一个)。这就像我只将一个图像放入imageview并且永远不会改变它。 我在ImageView的imageproperty中添加了一个ChangeListener,输出了imageview的当前图像。它确实按需要改变,但仍然只渲染一个图像。图像肯定是不同的,我仔细检查。为什么在imageproperty改变时未更新imageview?
答案 0 :(得分:3)
您对所有关键帧使用相同的时间点,因此imgView.setImage(...)
的所有调用都在“同一时间”发生。只有最后一次这样的呼叫才会产生任何明显的效果,因为前面的呼叫之间没有时间。
您需要在不同的时间对图像视图的图像进行每次更改。类似的东西:
public void init(Image[] images) {
this.imgView = new ImageView(images[0]);
Timeline timeLine = new Timeline();
Collection<KeyFrame> frames = timeLine.getKeyFrames();
Duration frameGap = Duration.millis(256);
Duration frameTime = Duration.ZERO ;
for (Image img : images) {
frameTime = frameTime.add(frameGap);
frames.add(new KeyFrame(frameTime, e -> imgView.setImage(img)));
}
timeLine.setCycleCount(Timeline.INDEFINITE);
timeLine.play();
}