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

📄 actor.java

📁 一个j2me游戏代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				else if(m_phbBottom < Def.PHB_BOX)
                {
                    Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
                    setAction(m_actionIDNow+1, 1);
                }
                else if(Player.m_prince.intersectBox(m_posX, m_posY, getColBox(), Def.TILE_WIDTH))
                {
                    Player.m_prince.postMessage(Def.MSG_BOX_NEAR, this);
                }
                else
                {
                    Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
                }
                break;
            case Def.BOX_DROP:
            case Def.BOX_DROP2:
                if(checkBoxDamage())
                {
                    Player.m_prince.postMessage(Def.MSG_BOX_AWAY, this);
                    setAction(m_actionIDNow+1, 0);
                }
                else if(m_phbBottom >= Def.PHB_BOX)
                {
                    setAction(m_actionIDNow-1, 1);
                }
                break;
            case Def.BOX_SMASH:
            case Def.BOX_SMASH2:
                if(m_actionOver)
                {
					m_flag[3] = false;
                }
                break;
            case Def.BOX_STONE:
				Actor box = Player.m_prince.m_relativeMisc;
				if (box != null && Math.abs(box.m_posY - m_posY) < (4<<8))
				{
					if (box.m_relativeMisc == null ||
					    Math.abs(box.m_relativeMisc.m_posX - box.m_posX) > Math.abs(m_posX - box.m_posX))
					    box.m_relativeMisc = this;
				}
                break;
		}
	}
	void drawMsg(byte msgIndex)
	{
		if (msgIndex >= 0 && GE.m_playHint > 0)
		{
			if (Def.PF_TOP > 0)
				GE.m_brushBottom = true;
			GE.m_msgIndex = msgIndex;
			GE.m_msgLine = 0;
			GE.m_msgTime = GE.m_curFrameTime + Def.HINT_SHOWTIME;
			Player.m_prince.setAction(Def.PRINCE_NORMAL, 1);
			GE.resetKey();
		}
	}
	void aiBonus()
	{
        switch (m_actionIDNow)
        {
        case Def.BONUS_CHECKPOINT:
        case Def.BONUS_CHECKPOINT2:
            if (m_actionOver)
            {
                setAction(m_actionIDNow - Def.BONUS_CHECKPOINT + Def.BONUS_CHECKPOINT_WAIT, 1);
            }
            return;
        case Def.BONUS_IND_WALLING:
        case Def.BONUS_IND_WALLJUMP:
        case Def.BONUS_IND_ROLL:
        case Def.BONUS_IND_JUMP:
        case Def.BONUS_IND_UP:
        case Def.BONUS_IND_CLIMBDOWN:
        case Def.BONUS_IND_BOX:
            if (m_actionOver)
            {
                setAction(m_actionIDNow, 0);
                stopAction(true);
                return;
            }
        }
        if (!Player.m_prince.intersectColBox(this))
            return;
        switch (m_actionIDNow)
        {
        case Def.BONUS_POTION:
            if (Player.m_prince.addHp())
                m_flag[3] = false;
            break;
        case Def.BONUS_STRENGTH:
            if (Player.m_prince.enableAbility(m_parameters[0]))
            {
                m_flag[3] = false;
                drawMsg(m_parameters[1]);
            }
            break;
        case Def.BONUS_NEXTLEVEL:
            //if (Player.m_prince.m_actionIDNow <= Def.PRINCE_RUN)
            //    Player.m_prince.setAction(Def.PRINCE_HIDE, 1);
            //else if (Player.m_prince.m_actionIDNow == Def.PRINCE_HIDE && Player.m_prince.m_actionOver)
                Pop2MIDlet.m_ge.levelFinished(true);
            break;
        case Def.BONUS_CHECKPOINT_WAIT:
        case Def.BONUS_CHECKPOINT2_WAIT:
            if (Player.m_prince.m_showDirection == 0)
            {
                Player.m_prince.postMessage(Def.MSG_CHECKPOINT, this);
                setAction(m_actionIDNow - Def.BONUS_CHECKPOINT_WAIT + Def.BONUS_CHECKPOINT, 1);
            }
            Player.m_prince.m_showDirection = Prince.SHOWDIRECTION_FRAMES;
            break;
        case Def.BONUS_MESSAGE:
            if (GE.m_playHint == 0) return;
        case Def.BONUS_WAIT:
            if (Player.m_prince.m_actionIDNow > Def.PRINCE_RUN && Player.m_prince.m_actionIDNow != Def.PRINCE_LAND && Player.m_prince.m_phbBottom < Def.PHB_BOX)
            {
                Player.m_prince.setAction(Def.PRINCE_FALL, 1);
                GE.resetKey();
                Player.m_prince.m_vX = 0;
                break;
            }
        case Def.BONUS_ACTIVATED:
            if (m_actionIDNow == Def.BONUS_WAIT)
            {
                if (Player.m_prince.enableAbility(m_parameters[0]))
                    setAction(Def.BONUS_ACTIVATED, 0);
                else
                    m_flag[3] = false;
            }
            else if (m_actionOver)
            {
                m_flag[3] = false;
                drawMsg(m_parameters[1]);
            }
            break;
        case Def.BONUS_IND_WALLING:
        case Def.BONUS_IND_WALLJUMP:
        case Def.BONUS_IND_ROLL:
            if (Player.m_prince.ability[m_actionIDNow - Def.BONUS_IND_WALLING + Prince.CAN_WALLING] <= 0 ||
                Player.m_prince.m_flag[0] != m_flag[0])
            {
                break;
            }
        case Def.BONUS_IND_JUMP:
        case Def.BONUS_IND_UP:
        case Def.BONUS_IND_CLIMBDOWN:
        case Def.BONUS_IND_BOX:
            if (GE.m_playHint == 0) break;
            if (m_durNow < 0) m_durNow = 0;
            break;
		}
	}

	void aiRSword()
	{
		if(Player.m_prince.intersectAttackBox(this))
		{
			Player.m_prince.postMessage(Def.MSG_HURT, this);
		}
	}

	void aiTreadle()
	{
		switch(m_actionIDNow)
		{
			case Def.TREADLE_WAIT:
				if (Player.checkTreadleCollision(this))
				{
					setAction(Def.TREADLE_DOWN, 0);
					if(Player.m_actors[m_parameters[0]] != null && Player.m_actors[m_parameters[0]].m_actionIDNow == Def.NAIL_WAIT)
					{
						Player.m_actors[m_parameters[0]].setAction(Def.NAIL_START, 1);
					}
				}
				break;
			case Def.TREADLE_DOWN:
				if (!Player.checkTreadleCollision(this))
				{
					setAction(Def.TREADLE_WAIT, 0);
				}
				break;
		}
	}

	void aiNail()
	{
		switch(m_actionIDNow)
		{
		case Def.NAIL_START:
			if(m_actionOver)
			{
				setAction(Def.NAIL_FALLING, 1);
				//GE.playSound(Def.SOUND_FALLING_MID, 1);
			}
            break;
		case Def.NAIL_FALLING:
			if(Player.m_prince.intersectAttackBox(this))
			{
				Player.m_prince.postMessage(Def.MSG_HURT, this);
			}
			if(m_phbBottom >= Def.PHB_SOLID)
			{
				setAction(Def.NAIL_SMASH, 1);
			}
            break;
		case Def.NAIL_WAIT:
			// no hurt on wait
			m_posY = m_start2;
			break;
		case Def.NAIL_SMASH:
			if(m_actionOver)
			{
				if(m_parameters[0] > 0)
				{
					m_posY = m_start2;
					setAction(Def.NAIL_WAIT, 1);
					m_phbBottom = Def.PHB_AIR;
				}
				else m_flag[3] = false;
			}
			break;
		}
	}

	void aiGhost()
	{
		int py, speed;
		switch(m_actionIDNow)
		{
			case Def.GHOST_SLEEP:
				if(Math.abs(m_posX - Player.m_prince.m_posX) < (160 << 8) && Math.abs(m_posY - Player.m_prince.m_posY) < (90 << 8))
				{
					m_flag[2] = true;
					setAction(Def.GHOST_APPEAR, 1);
					setFlipX(m_posX > Player.m_prince.m_posX);
				}
				break;
			case Def.GHOST_APPEAR:
				if(m_actionOver)
				{
					setAction(Def.GHOST_MOVE, 1);
					m_counter = 0;
				}
				break;
			case Def.GHOST_MOVE:
			case Def.GHOST_MOVE_FAST:
			case Def.GHOST_HAPPY:
				if (Player.m_focusEnemy == null)
					Player.m_focusEnemy = this;
				if (m_actionIDNow == Def.GHOST_MOVE)
				{
					speed = 0x300;
				}
				else // GHOST_MOVE_FAST
				{
					speed = 0x600;
				}
				if (m_actionIDNow == Def.GHOST_HAPPY)
				{
					if (m_flag[0])
					{
						m_posX -= speed;
					}
					else// if(m_posX < Player.m_prince.m_posX)
					{
						m_posX += speed;
					}
					//m_posY -= 0x0050;
					if(m_actionOver)
					{
						setAction(Def.GHOST_MOVE, 1);
						break;
					}
				}
				else
				{
					setFlipX(m_posX > Player.m_prince.m_posX);
					if(m_posX > Player.m_prince.m_posX)
					{
						m_posX -= speed;
					}
					else// if(m_posX < Player.m_prince.m_posX)
					{
						m_posX += speed;
					}
					py = Player.m_prince.m_posY + ((Player.m_prince.getColBox()[1] + Player.m_prince.getColBox()[3])<<7);
					if(m_posY > py)
					{
						m_posY -= speed;
						if (m_posY < py) m_posY = py;
					}
					else// if(m_posY < py)
					{
						m_posY += speed;
						if (m_posY > py) m_posY = py;
					}
				}
				if(Player.m_prince.intersectAttackBox(this))
				{
					Player.m_prince.postMessage(Def.MSG_HURT, this);
					setAction(Def.GHOST_HAPPY, 1);
				}
				else if(intersectAttackBox(Player.m_prince))
				{
					if(--m_hp > 0)
					{
						setAction(Def.GHOST_HURT, 1);
					}
					else
					{
						// died
						setAction(Def.GHOST_HIDE, 1);
						if (Player.m_focusEnemy.equals(this))
							Player.m_focusEnemy = null;
					}
				}
				break;
			case Def.GHOST_HURT:
			    speed = 0x400;
				if(m_posX > Player.m_prince.m_posX)
				{
					m_posX += speed;
				}
				else// if(m_posX < Player.m_prince.m_posX)
				{
					m_posX -= speed;
				}
				py = Player.m_prince.m_posY + ((Player.m_prince.getColBox()[1] + Player.m_prince.getColBox()[3])<<7);
				if(m_posY > py)
				{
					m_posY += speed/2;
				}
				else// if(m_posY < py)
				{
					m_posY -= speed/2;
				}
				if(m_actionOver)
				{
					setAction(Def.GHOST_MOVE_FAST, 1);
				}
				break;
			case Def.GHOST_HIDE:
				if(m_actionOver)
				{
					m_flag[2] = false;
					m_flag[3] = false;
				}
				break;
		}
	}
	boolean checkArrowSendBack()
	{
		Actor a = Player.checkDamage(this);
		if (a == null) return false;
		if (a.m_animID == Def.ID_PRINCE)
		{
			//setAction(Def.SANDMAN_ARROW_BACK, true);
			setFlipX(a.m_posX > m_posX);
			return false;
		}
		return true;
	}
	boolean checkSandmanDamage()
	{
		Actor a = Player.checkDamage(this);
		if(a == null)return false;
		switch(a.m_animID)
		{
			case Def.ID_SANDMAN:
				if ((a.m_actionIDNow != Def.SANDMAN_ARROW /*&& a.m_actionIDNow != Def.SANDMAN_ARROW_BACK*/) || (a.m_posX > m_posX) ^ (a.m_vX < 0))
					return false;
				a.setAction(Def.SANDMAN_BROKEN, 1);
			case Def.ID_PRINCE:
				m_hp --;
				break;
    		default:
    			m_hp = 0;
    			break;
		}
		if (m_actionIDNow < Def.SANDMAN_BM_GUARD)// || m_actionIDNow == Def.SANDMAN_HM_HURT)
		{
			if (m_hp <= 0)
			{
				m_counter = RECOVER_TIME;
				setAction(Def.SANDMAN_HM_LYING, 1);
			}
			else
				setAction(Def.SANDMAN_HM_HURT, 1);
		}
		else
		{
			if (m_hp <= 0)
			{
				m_counter = RECOVER_TIME;
				setAction(Def.SANDMAN_BM_LYING, 1);
			}
			else
				setAction(Def.SANDMAN_BM_HURT, 1);
		}
		return true;
	}
	boolean checkSandmanPrinceInVision()
	{
		if(m_posX > Player.m_prince.m_posX ^ m_flag[0]) return false;
		return Math.abs(m_posX - Player.m_prince.m_posX) < ((Def.PF_WIDTH*5/6) << 8) && checkSandmanInRange();
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -