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