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 + -
显示快捷键?