📄 animation.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 + -