📄 role.java
字号:
import javax.microedition.lcdui.*;
import java.io.*;
public class Role {
private int m_iLev;//等级
private int m_iExp;//经验
private int m_iHP;//生命值
private int m_iMP;//魔法值
private int m_iAp;//攻击力
private int m_iSpeed=4;//人物的步长
private int iState;//角色状态,根据不同的游戏事件而改变
private int m_iActionNum;//动作的数量
private RoleAction[] m_RoleAction;//动作数组
private int iActionID;//当前要播放的动作ID
private int iX ;//角色相对于屏幕的坐标
private int iY ;//
private Map myMap;//角色所在的地图的对象
private int drawType;//绘制类型0为不镜像 1为镜像
private int actionType;//动作播放类型 1为播放1帧 0为播放一次 其他为循环播放
private int roleDir;//角色方向
private int roleState;//角色状态
private boolean bNoAction;//没有动作
private int traceArea=50;//角色的追踪视野范围
private int attackArea=25;//角色的攻击视野
private int attTime=1000;//角色的攻击时间间隔
public Role(Map map) {//构造函数中引入Map类对象
myMap=map;//Role的Map类变量指向当前地图
}
/**
* 设置当前要播放的动作
* @param id int 动作ID
*/
public void setActionID(int id,int type, int _actionType){
if (id >= m_iActionNum ) { //判断是否取到了没有的动作
bNoAction=true;//没有该动作
return;
}
bNoAction=false;//
if(id!=-1){//如果==-1那么就不改变动作ID
iActionID = id;
}
if(type!=-1){//如果==-1那么就不改变绘制类型
drawType = type;
}
if(_actionType!=-1){//如果==-1那么就不改变动作播放类型
actionType = _actionType;
}
}
/**
* 载入角色数据
*/
public void loadRoleData(DataInputStream din){
try {
din.readInt() ;
m_iActionNum = din.readByte(); //读动作数
m_RoleAction = new RoleAction[m_iActionNum];
for (int i = 0; i < m_iActionNum; i++) {
m_RoleAction[i] = new RoleAction();
m_RoleAction[i].loadActionData(din); //载入角色动作数据
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* 拷贝角色
* @param _role Role
* @param m int
* @param n int
*/
public void copyRoll(Role _role ,int m,int n){
m_iActionNum = _role.m_iActionNum;//复制动作数
m_RoleAction = new RoleAction[_role.m_iActionNum];//创建动作数组
for (int i = 0; i < m_iActionNum; i++) {
m_RoleAction[i] = new RoleAction();
m_RoleAction[i].copyAction(_role.m_RoleAction[i]);//复制动作类对象
}
iX = n * 16;//获得相对于地图的像素坐标
iY = m * 16;
}
/**
* 绘制角色的方法
* @param g Graphics
*/
public void drawRole(Graphics g, int offx, int offy) {
if (m_RoleAction[iActionID].drawRoleAction(g, iX - offx, iY - offy,
drawType, actionType)) {
actionType = 1; //如果播放完了一次 那么就设置播放方式为播放第一帧
roleState = Data.ROLE_STAND;//设置角色状态为站立状态
}
}
/**
* 角色移动
* @param keyCode int 按键信息
*/
public void roleMove(int keyCode,int type){
if (bNoAction) { //当取到超出动作数量时 不移动
return;
}
if (type > 0) { //当一般行走时 记录当前的按键方向
roleDir = keyCode;
}
switch (keyCode) {
case Data.MYKEY_UP: // 当按上方向键时
if (iY > 10) { //角色向上超出地图边界
iY -= m_iSpeed;
}
break;
case Data.MYKEY_RIGHT: // 当按右方向键时
if (iX < myMap.getM_Width() * myMap.getM_CellWidth() - 10) { //角色向右超出地图边界
iX += m_iSpeed;
}
break;
case Data.MYKEY_DOWN: // 当按下方向键时
if (iY < myMap.getM_Height() * myMap.getM_CellHeight() - m_iSpeed) {
iY += m_iSpeed;
}
break;
case Data.MYKEY_LEFT: // 当按左方向键时
if (iX > 10) {
iX -= m_iSpeed;
}
break;
}
}
public int getIX() {//取得角色的X轴坐标
return iX;
}
public int getIY() {
return iY;
}
public int[] getHitRect() { //取得碰撞区域
return m_RoleAction[iActionID].getHitRect();
}
public int[] getAttackRect() { //取得攻击矩形
return m_RoleAction[iActionID].getAttackRect();
}
public int getRoleDir(){ //获得当前角色方向
return roleDir;
}
public void setRoleState(int _state) { //设置角色状态
roleState = _state;
}
public int getRoleState() { //得到角色状态
return roleState;
}
public int getTraceArea(){//获得追踪视野范围
return traceArea;
}
public int getAttackArea(){//获得攻击视野范围
return attackArea;
}
public int getAttTime(){//获得攻击间隔
return attTime;
}
public void setIX(int iX) {//设置角色X轴位置
this.iX = iX;
}
public void setIY(int iY) {//设置角色y轴位置
this.iY = iY;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -