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

📄 cman.java

📁 经典java手机游戏J2me(Rpj游戏)
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                                {
                                    m_posX -= 16;      //滚屏
                                    m_nextCollideNPC = -1;
                                }
                            }
                        }
                    }
                }
                else
                {
                    row = (m_posY + 40) / 16;
                    col = (m_posX + 12) / 16;
                    if (row - 1 >= 0 && col - 1 >= 0)
                    {
                        m_nextGrid = m_map.GetMapData(row - 1, col - 1);
                        if (m_collision.InCanGoGrid(m_nextGrid))
                        {
                            boolean collide = false; //是否碰撞
                            for (int i = 0; i < m_npc.length; i++)  //与当前场景中所有 NPC 都进行碰撞检测
                            {
                                if (m_npc[i].getSceneID() == 2 &&   //是否是小场景中的一个NPC
                                    RectInRect(m_posX - 6 - step, m_posY + 16 - step / 2, 18, 32, m_npc[i].getPosX() + 6, m_npc[i].getPosY() + 3, 8, 14))
                                {
                                    collide = true; //与第 i 个 NPC 碰撞
                                    m_nextCollideNPC = m_npc[i].getID();
                                    break;
                                }
                            }
                            if (!collide)
                            {
                                m_posX -= step;
                                m_posY -= step / 2;
                                m_nextCollideNPC = -1;
                            }
                        }
                    }
                }
                m_offG.setClip(m_posX - 6, m_posY + 6, 24, 48);
                m_offG.drawImage(m_player, m_posX - 6 - m_moveFrame[3][m_nowFrame] * 24, m_posY + 6, 0);
                break;
        }
        m_nowFrame++;   //下一帧
        if (m_nowFrame > 2)
            m_nowFrame=0;
        if (m_dir != 0 && m_collision.InBigMap())   //在大地图中每走动一步
        {
            m_stepToFight--;
            if (m_stepToFight < 0)  //触发战斗
            {
                m_fighted = true;
                m_battle.reset(m_playerLv, m_playerHP, m_playerMP, m_playerExp);    //将主角信息传入 CBattle 中,使场景主角信息与战斗主角信息同步
            }
        }
        m_offG.setClip(0, 0, 176, 208);
        m_offG.setColor(255, 0, 0);
//        m_offG.drawString("nextGrid="+m_nextGrid, 0, 0, 0);
//        m_offG.drawString("posX=" + m_posX + " posY=" + m_posY, 0, 20, 0);
//        m_offG.drawString("placeX=" + m_placeX + " placeY=" + m_placeY, 0, 40, 0);
//        m_offG.drawString("faceDir=" + m_faceDir, 0, 60, 0);
//        m_offG.drawLine(m_posX, m_posY, m_posX, m_posY);
//        m_offG.fillRect(col * 16, row * 16, 16, 16);
//        m_offG.drawRect(m_posX - 6, m_posY + 16, 18, 32);   //碰撞盒!!!!!
//        m_offG.drawRect(m_npc[0].getPosX() + 6, m_npc[0].getPosY() + 3, 8, 14);
//        m_offG.drawRect(m_npc[1].getPosX() + 6, m_npc[1].getPosY() + 3, 8, 14);
//        m_offG.drawRect(m_npc[2].getPosX() + 6, m_npc[1].getPosY() + 3, 8, 14);
//        m_offG.drawRect(m_npc[3].getPosX() + 6, m_npc[1].getPosY() + 3, 8, 14);
//        m_offG.drawRect(m_npc[4].getPosX() + 6, m_npc[1].getPosY() + 3, 8, 14);
//        m_offG.drawString("nextCollide=" + m_nextCollideNPC, 0, 0, 0);
//        m_offG.drawRect(m_npcX + 6, m_npcY + 3, 8, 14);
    }
    
    //---------------------------------------------------
    // 根据场景号画 NPC
    //---------------------------------------------------
    public void drawNPC()
    {
        switch (m_scene)
        {
            case 1:     //在大地图中
                for (int i = 0; i < m_npc.length; i++)
                {
                    if (m_npc[i].getSceneID() == 1)
                    {
                        m_npc[i].setPos(m_npc[i].getOriPosX() - 16 * (m_placeX - m_npc[i].getPlaceX()) - 6, m_npc[i].getOriPosY()  - 16 * (m_placeY - m_npc[i].getPlaceY()));
                        if (m_npc[i].getPosX() < - 26 || m_npc[i].getPosX() > 176 || m_npc[i].getPosY() < - 37 || m_npc[i].getPosY() > 208)     //NPC 在视图外面,不用画了。
                        {
                            //break;
                        }
                        m_offG.setClip(m_npc[i].getPosX(), m_npc[i].getPosY(), 26, 37);
                        m_offG.drawImage(m_imnpc, m_npc[i].getPosX() - m_npc[i].getID() * 26, m_npc[i].getPosY(), 0);
                    }
                }
                break;
            case 2:     //在小地图中
                for (int i = 0; i < m_npc.length; i++)
                {
                    if (m_npc[i].getSceneID() == 2)
                    {
                        m_offG.setClip(m_npc[i].getPosX(), m_npc[i].getPosY(), 26, 37);
                        m_offG.drawImage(m_imnpc, m_npc[i].getPosX() - m_npc[i].getID() * 26, m_npc[i].getPosY(), 0);
                    }
                }
                break;
        }
    }
    
    //---------------------------------------------------
    // 战斗类的渲染
    //---------------------------------------------------
    public void drawBattle()
    {
        m_battle.paint();
        updatePlayer(); //每回合更新主角信息
        if (m_battle.isFinished())  //战斗结束
        {
            m_fighted = false;
            Random random = new Random();
            m_stepToFight = 30 + Math.abs(random.nextInt() % 20);
        }
    }
    
    //---------------------------------------------------
    // 判断两个 RECT 是否碰撞
    //---------------------------------------------------
    public boolean RectInRect(int Rect1X, int Rect1Y, int Rect1W, int Rect1H,
                              int Rect2X, int Rect2Y, int Rect2W, int Rect2H)
    {
        if (Rect1X + Rect1W < Rect2X ||
            Rect1X > Rect2X + Rect2W ||
            Rect1Y + Rect1H < Rect2Y ||
            Rect1Y > Rect2Y + Rect2H)
            return false;
        return true;
    }
    
    //---------------------------------------------------
    // 更新主角信息
    //---------------------------------------------------
    public void updatePlayer()
    {
        m_playerHP  = m_battle.getPlayerHP();
        m_playerMP  = m_battle.getPlayerMP();
        m_playerLv  = m_battle.getPlayerLevel();
        m_playerExp = m_battle.getPlayerExp();
    }
    
    //---------------------------------------------------
    // 返回下一步要碰撞的 NPC 的 ID 号
    //---------------------------------------------------
    public int getNextCollideNPC()
    {
        return m_nextCollideNPC;
    }
    
    //---------------------------------------------------
    // 返回是否正在战斗
    //---------------------------------------------------
    public boolean isFighted()
    {
        return m_fighted;
    }
    
    //---------------------------------------------------
    // 返回主角是否死亡
    //---------------------------------------------------
    public boolean isDead()
    {
        return m_battle.isDead();
    }
    
    //---------------------------------------------------
    // 得到下一步的地图块号
    //---------------------------------------------------
    public int  getNextGrid()
    {
        return  m_nextGrid;
    }
    
    //---------------------------------------------------
    // 得到 X 坐标
    //---------------------------------------------------
    public int getPosX()
    {
        return m_posX;
    }
    
    //---------------------------------------------------
    // 得到 Y 坐标
    //---------------------------------------------------
    public int getPosY()
    {
        return m_posY;
    }
    
    //---------------------------------------------------
    // 得到面向序号
    //---------------------------------------------------
    public int getFaceDir()
    {
        return m_faceDir;
    }
    
    //---------------------------------------------------
    // 按键消息处理
    //---------------------------------------------------
    public void keyPressed(int key)
    {
        if (m_fighted)  //处于战斗页面
        {
            m_battle.keyPressed(key);
        }
        else    //处于场景页面
        {
            if (key == Canvas.UP)
            {
                m_dir = 3;
            }
            if (key == Canvas.DOWN)
            {
                m_dir = 1;
            }
            if (key == Canvas.LEFT)
            {
                m_dir = 4;
            }
            if (key == Canvas.RIGHT)
            {
                m_dir = 2;
            }
        }
    }
    
    //---------------------------------------------------
    // 按键消息处理
    //---------------------------------------------------
    public void keyReleased(int key)
    {
        if (m_dir != 0)
            m_faceDir = m_dir;
        m_dir     = 0;      //松开键后站立
    }
    
}

⌨️ 快捷键说明

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