如何在java中使动画只运行一次?
因此,我使用了一本关于如何用java编程游戏的书中的框架,它有一个动画类,如下所示:如何在java中使动画只运行一次?,java,animation,Java,Animation,因此,我使用了一本关于如何用java编程游戏的书中的框架,它有一个动画类,如下所示: package com.vincent.framework.animation; import java.awt.Graphics; public class Animation { private Frame[] frames; private double[] frameEndTimes; private int currentFrameIndex = 0; private double total
package com.vincent.framework.animation;
import java.awt.Graphics;
public class Animation {
private Frame[] frames;
private double[] frameEndTimes;
private int currentFrameIndex = 0;
private double totalDuration;
private double currentTime;
public Animation(Frame... frames) {
this.frames = frames;
frameEndTimes = new double[frames.length];
for (int i = 0; i < frames.length; i++) {
Frame f = frames[i];
totalDuration += f.getDuration();
frameEndTimes[i] = totalDuration;
}
}
public synchronized void update(float increment) {
currentTime += increment;
if (currentTime > totalDuration) {
wrapAnimation();
}
while (currentTime > frameEndTimes[currentFrameIndex]) {
currentFrameIndex++;
}
}
private synchronized void wrapAnimation() {
currentFrameIndex = 0;
currentTime %= totalDuration;
}
public synchronized void render(Graphics g, int x, int y) {
g.drawImage(frames[currentFrameIndex].getImage(), x, y, null);
}
public synchronized void render(Graphics g, int x, int y, int width, int height) {
g.drawImage(frames[currentFrameIndex].getImage(), x, y, width, height, null);
}
}
如果希望动画一次又一次地重复,这很好,但是当动画到达最后一帧时,如何使其停止?我曾尝试使用if语句来检查它是否已到达最后一个阶段,但由于某些原因,它会跳过帧。谢谢你的帮助 在方法wrapAnimation中去掉currentFrameIndex=0行的操作最终成功。原来问题出在另一个调用update的类中。在某些情况下,动画计时器启动太早,导致其跳过帧。wrapAnimation将是一个起点,但实际触发更新的是什么?更新在单独的类中触发。几乎在游戏循环中调用更新时,我尝试完全摆脱包装动画,但我遇到了大量错误。什么意思,完全摆脱包装动画?你应该注释掉一行,据我所知,这不应该破坏任何东西;在wrapAnimation中,它会自动跳到最后一帧,因此没有动画,除非我将每一帧的时间设置为.5,但这对于动画来说太慢了