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

📄 player_west.java~2~

📁 j2me 横版过关游戏工程。(demo).可以参考下
💻 JAVA~2~
📖 第 1 页 / 共 3 页
字号:
                }
            }
            if (idUse == -1)
            {
                cloudIdx = -1;
            }
            else
            {
                int dXUse = 0;
                int dYUse = 0;
                if (npc.npc[idUse].littleId == 1)
                    dXUse = -npc.npc[idUse].speed;
                if (npc.npc[idUse].littleId == 2)
                    dYUse = -npc.npc[idUse].speed;
                WestGameCanvas.mapX += dXUse;
                WestGameCanvas.mapY += dYUse;
                for (i = npcLen; --i >= 0;)
                    if (npc.npc[i] != null)
                        npc.npc[i].move(dXUse, dYUse);
            }
        }

        Npc_West npcTemp;
        int tempId;
        short[] arrayTemp;
        for (i = npcLen; --i >= 0;)
        {
            npcTemp = npc.npc[i];
            if (null != npcTemp && npcTemp.num != -1 && npcTemp.visible)
            {
                //与npc的碰撞检测
                int collectFram;
                tempId=(npcTemp.id==3&&WestGameCanvas.gameLevel>2)?0:npcTemp.id;
                switch (tempId)
                {
                    //普通NPC
                    case 0:
                        if ((3934 & prePlayerState) == 0
                                || (42 & npcTemp.npcState) == 0)
                            break;
                        collectFram = npcTemp.frameSequence[npcTemp.getFrame()];
                        if(npcTemp.id==3)
                            arrayTemp = data.BossFrame(npcTemp.id)[collectFram];
                        else
                            arrayTemp = data.NpcFrame(npcTemp.id)[collectFram];
                        npcTemp.defineCollisionRectangle(arrayTemp[0],
                                arrayTemp[1], arrayTemp[2], arrayTemp[3]);
                        collectFram = frameSequence[getFrame()];
                        arrayTemp = data.getPlayerRec()[collectFram];
                        if ((8 & npcTemp.npcState) != 0)
                        {
                            defineCollisionRectangle(arrayTemp[0],
                                    arrayTemp[1], arrayTemp[2], arrayTemp[3]);
                            if (collidesWith(npcTemp))
                            {
                                playerState = 128 + (1 & prePlayerState);
                                if(npcTemp.id==3)
                                    WestGameCanvas.hp -= data.getBossKind()[npcTemp.littleId][5];
                                else
                                    WestGameCanvas.hp -= data.getNpcKind()[npcTemp.littleId][5];
                                npcTemp.x += (1 & npcTemp.npcState) == 0 ? -20
                                        : 20;
                            }
                        }
                        //TODO player collide with npc
                        if ((64 & prePlayerState) != 0)
                        {
                            int wcx, wcw = 24;
                            //判断是否使用棒子,计算攻击范围宽度
                            if (this.getFrame() == 4 && this.imgWeapon != null)
                                wcw += this.weaponIdx > 3 ? 59 : 43;
                            //判断左右,计算攻击范围x位置位移
                            wcx = (1 & prePlayerState) != 0 ? (24-wcw) : 29;
                            //设置供给范围
                            defineCollisionRectangle(wcx, arrayTemp[1], wcw,
                                    arrayTemp[3]);
                            if (collidesWith(npcTemp))
                            {
                                npcTemp.npcState = 16 + (1 & npcTemp.npcState);
                                if(npcTemp.id==3)
                                	npcTemp.hp -= data.getBossKind()[npcTemp.littleId][4];
                                else
                                	npcTemp.hp -= data.getNpcKind()[npcTemp.littleId][4];
                                //npcTemp
                                npcTemp.x += (1 & npcTemp.npcState) == 0 ? -20
                                        : 20;
                            }
                        }
                        break;
                    //与云层相碰
                    case 1:
                        if ((16 & prePlayerState) == 0)
                            break;
                        if (x + 26 > npcTemp.x
                                && x + 26 < npcTemp.x + npcTemp.srcFrameWidth
                                && y + 54 > npcTemp.y
                                && y + 54 < npcTemp.y + npcTemp.srcFrameHeight
                                && cloudIdx == -1)
                        {
                            playerState = 2 | (1 & prePlayerState);
                            cloudIdx = npcTemp.num;
                            int dY = y + srcFrameHeight - npcTemp.y - 10;
                            WestGameCanvas.mapY += dY;
                            for (int j = npc.npc.length; --j >= 0;)
                                if (null != npc.npc[j])
                                    npc.npc[j].y += dY;
                        }
                        else
                        {
                            if (cloudIdx == npcTemp.num)
                                cloudIdx = -1;
                        }
                        break;
                    //与道具相碰撞
                    case 2:
                        collectFram = frameSequence[getFrame()];
                        arrayTemp = data.getPlayerRec()[collectFram];
                        defineCollisionRectangle(arrayTemp[0], arrayTemp[1],
                                arrayTemp[2], arrayTemp[3]);
                        if (collidesWith(npcTemp))
                        {
                            npcTemp.visible = false;
                            switch (npcTemp.littleId)
                            {
                                case 0:
                                    WestGameCanvas.hp += 20;
                                    break;
                                case 1:
                                    WestGameCanvas.hp += 50;
                                    break;
                                case 2:
                                    WestGameCanvas.hp += 100;
                                    break;
                            }
                            if (WestGameCanvas.hp > 100)
                                WestGameCanvas.hp = 100;
                        }
                        break;
                    //TODO boss coll
                    case 3:
                        if ((1886 & prePlayerState) == 0)
                            break;
                        collectFram = npcTemp.frameSequence[npcTemp.getFrame()];
                        arrayTemp = data.BossFrame(npcTemp.id)[collectFram];
                        npcTemp.defineCollisionRectangle(arrayTemp[0],
                                arrayTemp[1], arrayTemp[2], arrayTemp[3]);
                        int stoneIdx;
                        for (stoneIdx = npc.npc.length; --stoneIdx >= 0;)
                        {
                            if (null != npc.npc[stoneIdx]
                                    && npc.npc[stoneIdx].id == 4)
                                break;
                        }
                        if (stoneIdx >= 0
                                && (npc.npc[stoneIdx].npcState & 8) != 0)
                        {
                            if (npcTemp.collidesWith(npc.npc[stoneIdx]))
                            {
                                int space = 1 & npcTemp.npcState;
                                npcTemp.npcState = space | 32;
                                space = space == 0 ? -5 : 5;
                                npcTemp.x += space;
                                npcTemp.hp -= data.getBossKind()[npcTemp.littleId][4];
                                npc.npc[stoneIdx].npcState = 2;
                                npc.npc[stoneIdx].x += space;
                                npc.npc[stoneIdx].y = data.getNpcPosition()[npc.npc[stoneIdx].num][3]
                                        + WestGameCanvas.mapY;
                                return;
                            }
                        }
                        switch (collectFram)
                        {
                            case 4:
                            case 5:
                            case 13:
                            case 14:
                                collectFram = frameSequence[getFrame()];
                                arrayTemp = data.getPlayerRec()[collectFram];
                                defineCollisionRectangle(arrayTemp[0],
                                        arrayTemp[1], arrayTemp[2],
                                        arrayTemp[3]);
                                if (collidesWith(npcTemp))
                                {
                                    playerState = 128 + (1 & prePlayerState);
                                    WestGameCanvas.hp -= data.getBossKind()[npcTemp.littleId][5];
                                    if (stoneIdx >= 0
                                            && (prePlayerState & 768) != 0)
                                    {
                                        npc.npc[stoneIdx].npcState = 2;
                                        npc.npc[stoneIdx].y = data
                                                .getNpcPosition()[npc.npc[stoneIdx].num][3]
                                                + WestGameCanvas.mapY;
                                    }
                                }
                                defineCollisionRectangle(0, 0, srcFrameWidth,
                                        srcFrameHeight);
                                break;
                        }
                        break;
                }

            }
        }
        defineCollisionRectangle(0, 0, srcFrameWidth, srcFrameHeight);
    }

    /**
     * 设置最后的动画序列
     *
     */
    private void setFinalSequence(boolean isChangeBack)
    {

        if (playerState != prePlayerState || isChangeBack)
        {
            boolean isChangeDir = false;
            if ((1 & playerState) != (1 & prePlayerState))
            {
                isChangeDir = true;
            }
            int question;//有问题: 当由左下跳的状态到左站立的状态变化时此处判断不起作用
            if ((65471 & playerState) != (65471 & prePlayerState)
                    || isChangeBack)
            {
                switch (65471 & playerState)
                {
                    case 2:
                    case 3:
                        prePlayerState = (65471 & playerState)
                                + (64 & prePlayerState);
                        if ((64 & playerState) == 0)
                            setCurrSequence(data.getPlayer()[24], data
                                    .getPlayer()[25]);
                        speedX = speedY = mark = 0;
                        break;
                    case 4:
                    case 5:
                        if ((70 & prePlayerState) != 0)
                        {
                            prePlayerState = (65471 & playerState)
                                    + (64 & prePlayerState);
                            if (!isChangeBack)
                            {
                                speedX = data.getPlayer()[5];
                                speedY = mark = 0;
                                if ((1 & prePlayerState) == 1)
                                {
                                    speedX = -speedX;
                                }
                            }
                            if ((64 & prePlayerState) == 0)
                                setCurrSequence(data.getPlayer()[18], data
                                        .getPlayer()[19]);
                        }
                        break;
                    case 8:
                    case 9:
                        if ((2118 & prePlayerState) != 0)
                        {
                            if (!isChangeBack)
                            {
                                mark = 0;
                            }
                            prePlayerState = (65471 & playerState)
                                    + (64 & prePlayerState);
                            if ((64 & playerState) == 0)
                                setCurrSequence(data.getPlayer()[8], data
                                        .getPlayer()[9]);
                            if ((1 & prePlayerState) == 1)
                            {
                                speedX = -speedX;
                            }
                        }
                        break;
                    case 16:
                    case 17:
                        if ((318 & prePlayerState) != 0)
                        {
                            prePlayerState = (65471 & playerState)
                                    + (64 & prePlayerState);
                            if ((64 & playerState) == 0)
                                setCurrSequence(data.getPlayer()[10], data
                                        .getPlayer()[11]);
                            mark = data.playerJump()[0].length - 1;
                        }
                        break;
                    case 32:
                    case 33:
                        setCurrSequence(data.getPlayer()[26],
                                data.getPlayer()[27]);
                        mark = 0;
                        prePlayerState = playerState;
                        speedX = speedY = 0;
                        break;
                    case 128:
                    case 129:
                        if ((3934 & prePlayerState) != 0)
                        {
                            prePlayerState = 128 + (1 & prePlayerState);
                            speedX = 0;
                            setCurrSequence(data.getPlayer()[14], data
                                    .getPlayer()[15]);
                            mark = 5;
                        }
                        break;
                    case 256:
                    case 257:
                        if ((582 & prePlayerState) != 0)
                        {
                            prePlayerState = playerState;
                            speedX = 0;
                            setCurrSequence(data.getPlayer()[12], data
                                    .getPlayer()[13]);
                        }
                        break;
                    case 512:
                    case 513:
                        prePlayerState = playerState;
                        speedX = data.getPlayer()[5];
                        if (prePlayerState == 513)
                        {
                            speedX = -speedX;

⌨️ 快捷键说明

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