所以我正在使用一本关于如何在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 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语句检查它是否已到达最后一个阶段,但由于某种原因它会跳过帧。谢谢你的帮助!
答案 0 :(得分:0)
摆脱方法currentFrameIndex = 0
中的wrapAnimation()
行终于工作了。事实证明问题出在另一个调用update()
的类中。在某些情况下,动画计时器启动太早,导致它跳过帧。