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

📄 role.java

📁 JAVAME手机RPG游戏设计最终演示代码
💻 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 + -