📄 cman.java
字号:
{
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 + -