📄 role.java
字号:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class Role {
int x;
int y;
int w;
int h;
static int HP; /*生命值*/
int SP; /*能量值*/
int leftStep = 0;
final int maxHp = 80; /*主角的生命最大值,主角生命的固定上限*/
static boolean isRight; /*主角的移动方向*/
int actionIndex; //表示主角的哪个动作(站立、行走、攻击……)
int frameIndex; //当前处于该动作下的第几帧
boolean isDead;//标记主角是否死亡
boolean islong;//判断是否跑步循环了一圈
static final byte STEP = 5;//主角每次移动步长位5像素
static byte curStatus; /*主角的状态表示,如同程序基本状态一样*/
static final byte STATE_STAND1=0;//普通站立
static final byte STATE_STAND2=1;//楼梯站立
static final byte STATE_RUN=2;//跑
static final byte STATE_RUNEND=3;//跑后停止
static final byte STATE_QGO=4;//快速前进
static final byte STATE_QBACK=5;//快速后退
static final byte STATE_BEFOREDOW=6;//下蹲前序列动作
static final byte STATE_DOWN=7;//下蹲状态
static final byte STATE_DOWNUP=8;//下蹲后站起的序列动作
static final byte STATE_BEFORJUMP=9;//跳跃前的序列动作
static final byte STATE_JUMPUP=10;//跳跃空中的状态
static final byte STATE_JUMPDOWN=11;//跳跃后下落空中状态
static final byte STATE_JUMPOK=12;//跳跃落地序列动作
static final byte STATE_HIT1=13;//地上受伤动作
static final byte STATE_HIT2=14;//空中受伤动作
static final byte STATE_DIE=15;//死亡状态
static final byte STATE_STANDATTACK=16;//普通攻击状态
static final byte STATE_DOWNATTACK1=17;//下蹲攻击状态
static final byte STATE_JUMPATTACK=18;//跳跃攻击
Engine engine;
public Role(Engine GE){
engine = GE;
}
protected void init() {
isRight = true; //初始化主角的方向(面向)
SP = 100; //初始化主角的能量值
HP = maxHp; // 初始化主角生命值
x = 50; //初始化主角位置
y = 128;
setStatus(STATE_STAND1); //初始化主角的状态,
isDead = false;
keyState=0;
}
// ***画主角
public void setX(int x){
this.x=x;
}
public void setY(int y){
this.y=y;
}
protected void drawRole(Graphics g){
if(isDead){
engine.isook=true;
return;
}
//这里注意:主角对应在动画数据中的编号为0
Tools.drawNpcItemData(g,0,actionIndex,frameIndex,x,y,isRight);
// g.drawRect(x-Map.leftTopX-7,y-Map.leftTopY-37+8,14,20);
// g.drawRect(x-Map.leftTopX-7+5,y-Map.leftTopY-37,4,4);
// g.drawRect(x-Map.leftTopX-7+4,y-Map.leftTopY-2,6,2);
// for (int i = 0; i < engine.enemys.size(); i++)
// {
// Enemy enemy=null;
// enemy=(Enemy)engine.enemys.elementAt(i);
// if (enemy != null) {
// g.drawRect(enemy.x-7-Map.leftTopX,enemy.y-30,enemy.w,enemy.h);
// }
//
// }
}
//****************以下为按键部分********************//
int keyState;
int keyCode;
protected void keyPressed(int keys){ //按下
keyCode=keys;
switch(keys){
case Canvas.UP:
keyState|=Tools.KEY_UP;
break;
case Canvas.DOWN:
keyState|=Tools.KEY_DOWN;
break;
case Canvas.LEFT:
keyState|=Tools.KEY_LEFT;
break;
case Canvas.RIGHT:
keyState|=Tools.KEY_RIGHT;
break;
case Canvas.FIRE:
keyState|=Tools.KEY_FIRE;
break;
}
keyLogic();
}
protected void keyReleased(int keys){
leftStep = 0;
switch(keys){
case Canvas.UP:
keyState^=Tools.KEY_UP;
break;
case Canvas.DOWN:
keyState^=Tools.KEY_DOWN;
break;
case Canvas.LEFT:
keyState^=Tools.KEY_LEFT;
break;
case Canvas.RIGHT:
keyState^=Tools.KEY_RIGHT;
break;
case Canvas.FIRE:
keyState^=Tools.KEY_FIRE;
break;
}
keyLogic();
}
protected void keyLogic(){
switch (curStatus)
{
case STATE_STAND1:
if((keyState&Tools.KEY_UP)!=0){
setStatus(STATE_BEFORJUMP);
}
if((keyState&Tools.KEY_DOWN)!=0){
setStatus(STATE_BEFOREDOW);
}
if((keyState&Tools.KEY_LEFT)!=0){
isRight=false;
setStatus(STATE_RUN);
}
if((keyState&Tools.KEY_RIGHT)!=0){
isRight=true;
setStatus(STATE_RUN);
}
if((keyState&Tools.KEY_FIRE)!=0){
setStatus(STATE_STANDATTACK);
}
break;
case STATE_STAND2:
break;
case STATE_RUN:
if(keyState==0){
if(islong){
setStatus(STATE_RUNEND);
islong=false;
}else{
setStatus(STATE_STAND1);
}
}
if((keyState&Tools.KEY_FIRE)!=0){
setStatus(STATE_STANDATTACK);
}
if((keyState&Tools.KEY_UP)!=0){
setStatus(STATE_BEFORJUMP);
}
break;
case STATE_RUNEND:
break;
case STATE_QGO:
break;
case STATE_QBACK:
break;
case STATE_BEFOREDOW:
if(keyState==0){
setStatus(STATE_STAND1);
}
break;
case STATE_DOWN:
if((keyState&Tools.KEY_LEFT)!=0){
isRight=false;
}
if((keyState&Tools.KEY_RIGHT)!=0){
isRight=true;
}
if(keyState==0){
setStatus(STATE_DOWNUP);
}
if((keyState&Tools.KEY_FIRE)!=0){
setStatus(STATE_DOWNATTACK1);
}
break;
case STATE_DOWNUP:
break;
case STATE_BEFORJUMP:
break;
case STATE_JUMPUP:
case STATE_JUMPDOWN:
if((keyState&Tools.KEY_LEFT)!=0){
leftStep = STEP;
isRight=false;
}
if((keyState&Tools.KEY_RIGHT)!=0){
leftStep = STEP;
isRight=true;
}
if((keyState&Tools.KEY_FIRE)!=0){
setStatus(STATE_JUMPATTACK);
}
break;
case STATE_JUMPOK:
break;
case STATE_HIT1:
break;
case STATE_HIT2:
break;
case STATE_DIE:
break;
case STATE_STANDATTACK:
if((keyState&Tools.KEY_LEFT)!=0){
if(frameIndex==8)
setStatus(STATE_RUN);
}
if((keyState&Tools.KEY_RIGHT)!=0){
setStatus(STATE_RUN);
}
break;
case STATE_DOWNATTACK1:
break;
}
}
// ***以下为助教在各状态的帧的切换,移动,碰撞,逻辑处理部分
int icout=0;
protected void roleLogic(){
if(isDead) return;
isbyHit();
switch (curStatus)
{
case STATE_STAND1:
changeRoleFrameIndex(-1);
roleMove(0,2);
break;
case STATE_STAND2:
break;
case STATE_RUN:
changeRoleFrameIndex(-1);
if(aniIndex==9){
islong=true;
}
roleMove(5,5);
break;
case STATE_RUNEND:
changeRoleFrameIndex(STATE_STAND1);
break;
case STATE_QGO:
break;
case STATE_QBACK:
break;
case STATE_BEFOREDOW:
changeRoleFrameIndex(STATE_DOWN );
break;
case STATE_DOWN:
changeRoleFrameIndex(-2);
break;
case STATE_DOWNUP:
changeRoleFrameIndex(0);
break;
case STATE_BEFORJUMP:
changeRoleFrameIndex(STATE_JUMPUP);
if(aniIndex>=3){
setStatus(STATE_JUMPUP);
}
break;
case STATE_JUMPUP:
changeRoleFrameIndex(STATE_JUMPDOWN);
if (isRight)
roleMove(leftStep,0);
else
roleMove(leftStep,0);
roleMove(0,-7);
break;
case STATE_JUMPDOWN:
changeRoleFrameIndex(STATE_JUMPOK);
if (isRight)
roleMove(leftStep,0);
else
roleMove(leftStep,0);
roleMove(0,7);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -