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

📄 unitframe.java

📁 JAVAME手机RPG游戏设计最终演示代码
💻 JAVA
字号:
/**
 * UnitFrame
 */
import javax.microedition.lcdui.*;
import java.io.*;
public class UnitFrame {
  private byte m_Num; //组成该单元的切片数目
  private int[] m_iX; //切片相对于帧原点的X轴位置
  private int[] m_iY; //切片相对于帧原点的Y轴位置
  private int[] m_iImgID; //用到的切片在图片ID
  private int[] m_iCX; //在对应图片上的裁截区
  private int[] m_iCY; //
  private int[] m_iCW; //
  private int[] m_iCH; //
  private int m_iTime; //帧显示时间
  private int []m_iHitRect=new int[4];//碰撞矩形 包含了起始点和宽高4个值
  private long lStartTime; //开始画的时间点
  private boolean bStart; //是否开始绘制帧
  public UnitFrame() {
  }
  /**
   * 从数据类Data中载入帧数据
   * @param id int  帧ID
   */
  public void loadUnitFrameData(DataInputStream din  ) {
    try {
      m_Num = din.readByte(); //取得切片数量
      din.readInt(); //读取X偏移量  没有用到所以不赋值
      din.readInt(); //读取Y偏移量   没有用到所以不赋值
      din.readInt(); //读取帧的攻击量 没有用到所以不赋值
      m_iTime = din.readByte(); //取得显示时间
      m_iTime = 100; //把帧显示时间统一为100ms
      din.readByte(); //读取碰撞矩形的类型
      for (int i = 0; i < m_iHitRect.length; i++) {
        m_iHitRect[i] = din.readInt(); //取得该帧的碰撞信息
      }
      m_iImgID = new int[m_Num]; // 创建各个切片数组
      m_iX = new int[m_Num]; //
      m_iY = new int[m_Num]; //
      m_iCX = new int[m_Num]; //
      m_iCY = new int[m_Num]; //
      m_iCW = new int[m_Num]; //
      m_iCH = new int[m_Num]; //
      for (int i = 0; i < m_Num; i++) {
        m_iImgID[i] = din.readInt(); //读取图片ID
        m_iX[i] = din.readInt(); //切片相对与帧原点的坐标
        m_iY[i] = din.readInt();
        m_iCX[i] = din.readInt(); //切片在对应图片上的裁截区
        m_iCY[i] = din.readInt();
        m_iCW[i] = din.readInt();
        m_iCH[i] = din.readInt();
      }
    }
    catch (IOException ex1) {
      ex1.printStackTrace();
    }
  }
  /**
   * 绘制一帧
   * @param g Graphics
   * @param x int  绘制帧到屏幕X轴上的x点
   * @param y int  绘制帧到屏幕X轴上的y点
   */
  public boolean drawUnitFrame(Graphics g, int x, int y) {
    if (!bStart) { //
      bStart = true; //把开始状态设为true
      lStartTime = System.currentTimeMillis(); //记录下开始画的时间
    }
    for (int i = 0; i < m_Num; i++) {
      g.setClip(x + m_iX[i], y + m_iY[i], m_iCW[i], m_iCH[i]);
      g.drawImage(Data.imgTile[m_iImgID[i]], x + m_iX[i] - m_iCX[i]
                  , y + m_iY[i] - m_iCY[i], 0);
    }
    if (System.currentTimeMillis() - lStartTime > m_iTime) { //判断该帧绘制时间是否大于需要的绘制时间
      bStart = false; //绘制完成后 还原开始绘制的标志
      return true; //返回true表示该帧的显示时间已经达到,可以切换到下帧
    }
    return false;
  }
  /**
   * 返回碰撞矩形
   * @return int[]
   */
  public int[] getM_iHitRect() {//返回碰撞矩形
    return m_iHitRect;
  }
}

⌨️ 快捷键说明

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