📄 role.java
字号:
break;
case STATE_JUMPOK:
changeRoleFrameIndex(0);
break;
case STATE_HIT1:
changeRoleFrameIndex(0);
break;
case STATE_HIT2:
break;
case STATE_DIE:
changeRoleFrameIndex(-2);
if(aniIndex>=10)
isDead=true;
break;
case STATE_STANDATTACK:
checkRoleAttack();
changeRoleFrameIndex(STATE_STAND1);
break;
case STATE_DOWNATTACK1:
checkRoleAttack();
changeRoleFrameIndex(STATE_DOWN);
break;
case STATE_JUMPATTACK:
changeRoleFrameIndex(STATE_STAND1);
if(y<128)
y+=4;
break;
}
}
//下为状态切换
public void setStatus(byte status){
if(curStatus == status){
return;
}
aniIndex = 0;
frameIndex = 0;
switch (status){
case STATE_STAND1:
actionIndex=0;
break;
case STATE_STAND2:
actionIndex=1;
break;
case STATE_RUN:
actionIndex=2;
break;
case STATE_RUNEND:
actionIndex=3;
break;
case STATE_QGO:
break;
case STATE_QBACK:
break;
case STATE_BEFOREDOW:
actionIndex=6;
break;
case STATE_DOWN:
actionIndex=14;
break;
case STATE_DOWNUP:
actionIndex=13;
break;
case STATE_BEFORJUMP:
actionIndex=4;
break;
case STATE_JUMPUP:
actionIndex=16;
break;
case STATE_JUMPDOWN:
actionIndex=15;
break;
case STATE_JUMPOK:
actionIndex=5;
break;
case STATE_HIT1:
actionIndex=10;
break;
case STATE_HIT2:
actionIndex=12;
break;
case STATE_DIE:
actionIndex=12;
break;
case STATE_STANDATTACK:
actionIndex=7;
break;
case STATE_DOWNATTACK1:
actionIndex=8;
break;
case STATE_JUMPATTACK:
actionIndex=7;
break;
}
curStatus = status;
}
/**
* nextState > 0 切换状态
* nextState = -1 循环播放
* nextState < -1 停留在最后一帧
* @param nextState byte
*/
private int aniIndex; //切换帧使用到的中间过渡变量
private final void changeRoleFrameIndex(int nextState)
{
if (aniIndex >= Data.frameItemIndex[0][actionIndex].length)
{
if (nextState >= 0)
{
aniIndex = 0;
frameIndex = Data.frameItemIndex[0][actionIndex][aniIndex];
setStatus((byte)nextState);
return;
}
else if (nextState == -1)
{
aniIndex = 0;
}
else
{
return;
}
}
frameIndex = Data.frameItemIndex[0][actionIndex][aniIndex];
aniIndex++;
}
protected final void roleMove(int stepX, int stepY)
{
this.getRoleSize();
/**********Y方向上的移动**********/
if (stepY > 0) //向下移动
{
if (Map.isFoot(x,y))
{
y = (short) ( (y + stepY) / Map.cellHeight * Map.cellHeight);
} else{
y += stepY; //主角的y值移动
if (!Map.isFoot(x,y)) //自由掉落的下落状态
{
/*非下落状态切换到下落状态,如果已经是下落状态则无需切换*/
setStatus(STATE_JUMPDOWN);
}
}
}
else if (stepY < 0)
{ //向上移动
if (Map.isHead(x,y))
{
// y = (short) ( (y + stepY) / Map.cellHeight * Map.cellHeight);
setStatus(STATE_JUMPDOWN);
}
else
{
/*与地图块没有发生碰撞情况*/
y += stepY;
}
}
/**********X方向上的移动**********/
if (stepX != 0)
{
if (!isRight)
{
if (Map.isBody(x,y))
{
x = (short) ( (x -(w /2)- stepX) / Map.cellWidth * Map.cellWidth
+ Map.cellWidth + (w >>> 1)); //不能行走则纠正主角的x坐标至前方遇到地图块的最右侧
// toStand(); //切换至站立状态
}
else
{
/*与地图块没有发生碰状情况*/
x -= stepX; //行走
}
}
else
{
if (Map.isBody(x,y))
{
x = (short) ( (x +(w /2) +stepX) / Map.cellWidth *
Map.cellWidth - (w >>> 1)); //不能行走则纠正主角的x坐标至前方遇到地图块的最左侧
// toStand(); //切换至站立状态
}
else
{
/*与地图块没有发生碰状情况*/
x += stepX;
}
}
}
}
protected final void getRoleSize()
{
int actionIndex = 0;//站立状态的动作索引;
int frameIndex = 0; //选择任意一帧作为普通状态下的被攻击帧。
w = 14; //Data.allItemData[Data.npcItem0[0][actionIndex][frameIndex][0]][3];
h = 37; //Data.allItemData[Data.npcItem0[0][actionIndex][frameIndex][0]][4];
}
int pw;
int ph;
int px;
int py;
protected final void getAttackSize(int frameIndex)
{
int ID = Data.npcItem0[0][actionIndex][frameIndex][0];
int offsetX = Data.npcItem0[0][actionIndex][frameIndex][1];
int offsetY = Data.npcItem0[0][actionIndex][frameIndex][2]-8;//在用地图编辑器是没注意,所以-8
int tempX=x+offsetX-(Data.allItemData[ID][3]>>1);
int tempY=y+offsetY-(Data.allItemData[ID][4]>>1);
if(isRight){
px=tempX - Map.leftTopX+Data.npcItem0[0][actionIndex][frameIndex][3];
py=tempY - Map.leftTopY+Data.npcItem0[0][actionIndex][frameIndex][4];
pw=Data.npcItem0[0][actionIndex][frameIndex][5];
ph=Data.npcItem0[0][actionIndex][frameIndex][6];
}else{
int tx=Data.allImage[ID].getWidth();
if(Data.allImage[ID].getWidth()%2!=0){
tx+=1;
}
tempX=x-offsetX-(tx>>1);
tempY=y+offsetY-(Data.allItemData[ID][4]>>1);
px=tempX - Map.leftTopX;
py=tempY - Map.leftTopY+Data.npcItem0[0][actionIndex][frameIndex][4];
pw=Data.npcItem0[0][actionIndex][frameIndex][5];
ph=Data.npcItem0[0][actionIndex][frameIndex][6];
}
}
public void checkRoleAttack(){
if(Data.npcItem0[0][actionIndex][frameIndex].length!=7) return;
getAttackSize(frameIndex);
for (int i = 0; i < engine.enemys.size(); i++)
{
Enemy enemy=null;
enemy=(Enemy)engine.enemys.elementAt(i);
if (enemy != null) {
if(Tools.isInRect(px,py,pw,ph,enemy.x+7-Map.leftTopX,enemy.y-30,enemy.w,enemy.h)){
enemy.setStatus((byte) 2);
}
// if(enemy.isRight){
// if(Tools.isInRect(enemy.x-Map.leftTopX,enemy.y-30,enemy.w,enemy.h,x-Map.leftTopX,y-Map.leftTopY-37,w,h)){
//
// setStatus(STATE_HIT1);
// }
// }else
// {
//
// }
}
}
}
int icount=0;
boolean ishaha;
public void isbyHit(){
if(ishaha&&icount<14)
{
icount++;
}
else
{
for (int i = 0; i < engine.enemys.size(); i++)
{
Enemy enemy=null;
enemy=(Enemy)engine.enemys.elementAt(i);
if (enemy != null&&!enemy.ischick) {
ishaha=true;
icount=0;
if(Tools.isInRect(enemy.x+7-Map.leftTopX,enemy.y-30,enemy.w,enemy.h,x-Map.leftTopX-10,y-Map.leftTopY-37,w+6,h)){
setStatus(STATE_HIT1);
HP-=5;
if(HP<=0){
HP=0;
setStatus(STATE_DIE);
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -