如何在java中只运行一次动画?

时间:2014-11-10 03:34:26

标签: 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 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语句检查它是否已到达最后一个阶段,但由于某种原因它会跳过帧。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

摆脱方法currentFrameIndex = 0中的wrapAnimation()行终于工作了。事实证明问题出在另一个调用update()的类中。在某些情况下,动画计时器启动太早,导致它跳过帧。