⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 animation.java

📁 goldminer游戏
💻 JAVA
字号:
package com.hbwhzdg.goldminer.graphics;

import java.awt.Image;
import java.util.ArrayList;

/**
 *
 * <p>Title: 将一系列的帧组织为一个动画。</p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Animation {

    private ArrayList frames; //一组帧
    private int currFrameIndex; //当前帧索引
    private long animTime; //动画的运行时间
    private long totalDuration; //动画总时间

    /**
     * 构造函数。
     * 创建一个空的Animation对象。
     */
    public Animation() {
        this(new ArrayList(), 0);
    }


    private Animation(ArrayList frames, long totalDuration) {
        this.frames = frames;
        this.totalDuration = totalDuration;
        start();
    }


    /**
     * 克隆一个副本。
     * 可以独立本体运行。
     * @return Object
     */
    public Object clone() {
        return new Animation(frames, totalDuration);
    }

    /**
     * 增加一个时间帧。
     * @param image Image
     * @param duration long 该帧显示多长时间
     */
    public synchronized void addFrame(Image image,
                                      long duration) {
        totalDuration += duration;
        frames.add(new AnimFrame(image, totalDuration));
    }

    public synchronized void start() {
        animTime = 0;
        currFrameIndex = 0;
    }

    /**
     * 如果有必要,更新该动画的当前帧。
     * @param elapsedTime long 与上次更新时间的差值,毫秒级
     */
    public synchronized void update(long elapsedTime) {
        if (totalDuration == 0) {
            return;
        }
        if (frames.size() > 1) {
            animTime += elapsedTime;

            //如果动画运行时间大于或等于动画总耗时,则动画运行时间取余,帧索引归零。
            if (animTime >= totalDuration) {
                animTime = animTime % totalDuration;
                currFrameIndex = 0;
            }

            //将帧转到当前时间的帧
            while (animTime > getFrame(currFrameIndex).endTime) {
                currFrameIndex++;
            }
        }
    }

    /**
     * 得到该动画的当前帧。
     * @return Image
     */
    public synchronized Image getImage() {
        if (frames.size() == 0) {
            return null;
        } else {
            return getFrame(currFrameIndex).image;
        }
    }

    /**
     * 得到该动画的指定时间帧。
     * @param i int
     * @return AnimFrame
     */
    private AnimFrame getFrame(int i) {
        return (AnimFrame) frames.get(i);
    }

    public int getFramesSize() {
        return frames.size();
    }

    public void setCurrFrameIndex(int currFrameIndex) {
        this.currFrameIndex = currFrameIndex;
    }

    public void setFrames(ArrayList frames) {
        this.frames = frames;
    }

    public ArrayList getFrames() {
        return frames;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -