Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使动画只运行一次?_Java_Animation - Fatal编程技术网

如何在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

因此,我使用了一本关于如何用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语句来检查它是否已到达最后一个阶段,但由于某些原因,它会跳过帧。谢谢你的帮助

在方法wrapAnimation中去掉currentFrameIndex=0行的操作最终成功。原来问题出在另一个调用update的类中。在某些情况下,动画计时器启动太早,导致其跳过帧。

wrapAnimation将是一个起点,但实际触发更新的是什么?更新在单独的类中触发。几乎在游戏循环中调用更新时,我尝试完全摆脱包装动画,但我遇到了大量错误。什么意思,完全摆脱包装动画?你应该注释掉一行,据我所知,这不应该破坏任何东西;在wrapAnimation中,它会自动跳到最后一帧,因此没有动画,除非我将每一帧的时间设置为.5,但这对于动画来说太慢了