animator.java
来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 160 行
JAVA
160 行
package magic.graphics;
import java.awt.*;
import java.util.*;
// 定义一个自定义的播放动画帧的方式
public abstract class Animator
extends Object
{
// 对图像帧链表的引用
protected LinkedList frames;
// 动画的当前索引
protected int currIndex;
// 创建一个新的Animator对象,其动画帧序列为空
protected Animator()
{
frames = null;
currIndex = 0;
}
public final void setFrames(LinkedList list)
{
frames = list;
}
// 重新设置动画
public void reset()
{
currIndex = 0;
}
// 返回动画的当前帧
public Image getCurrFrame()
{
if (frames != null) {
return (Image) frames.get(currIndex);
}
return null;
}
// 这个方法定义如何播放帧
public abstract void nextFrame();
// 以传入数组作为索引的动画帧
public static class Indexed
extends Animator
{
protected int[] indices;
protected int arrayIndex;
public Indexed()
{
super();
arrayIndex = 0;
}
public Indexed(int[] idx)
{
indices = new int[idx.length];
System.arraycopy(idx, 0, indices, 0, idx.length);
arrayIndex = 0;
}
public void nextFrame()
{
if (frames != null) {
// 索引递增
if (++arrayIndex >= indices.length) {
arrayIndex = 0;
}
currIndex = indices[arrayIndex];
}
}
} // Animator.Indexed
// 动画帧枚举,必要时从开头循环
public static class Looped
extends Animator
{
public Looped()
{
super();
}
public void nextFrame()
{
if (frames != null) {
if (++currIndex >= frames.size()) {
reset();
}
}
}
} // Animator.Looped
// 动画帧枚举,但是在到达最后一帧时停止
public static class OneShot
extends Animator
{
public OneShot()
{
super();
}
public void nextFrame()
{
if (frames != null) {
if (++currIndex >= frames.size())
;
{
currIndex = frames.size() - 1;
}
}
}
} // Animator.OneShot
// 在每一次调用nextFrame时产生一个随机的动画帧
public static class Random
extends Animator
{
private java.util.Random random;
public Random()
{
super();
random = new java.util.Random();
}
public void nextFrame()
{
if (frames != null) {
currIndex = random.nextInt() % frames.size();
}
}
} // Animator.Random
// 代表只包含一帧的动画--这个类节省时间,因为它不做处理
public static class Single
extends Animator
{
public Single()
{
super();
}
public void nextFrame()
{
// 什么也不做...
}
} // Animator.Single
} // Animator
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?