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

📄 role.java

📁 在学校时写的一个游戏DEMO
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    		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 + -