📄 cman.java
字号:
}
}
if (!collide)
{
m_posY += 16; //滚屏
m_nextCollideNPC = -1;
}
}
}
}
}
else //在小地图中
{
row = (m_posY + 40) / 16;
col = (m_posX + 12) / 16;
if (row + 1 <= 10 && 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[0][m_nowFrame] * 24, m_posY + 6, 0);
break;
case 2: //向右走
if (m_collision.InBigMap())
{
if (col + 1 + m_placeX <= m_map.getColNum())
{
m_nextGrid = m_map.GetMapData(row + m_placeY, col + 1 + m_placeX);
if (m_collision.InCanGoGrid(m_nextGrid))
{
if (col >= 5 && m_placeX + 1 < m_map.getColNum() - 10)
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6, m_posY + 16, 18, 32, m_npc[i].getPosX() + 6 - 16, m_npc[i].getPosY() + 3, 8, 14))
{
collide = true; //与第 i 个 NPC 碰撞
m_nextCollideNPC = m_npc[i].getID();
break;
}
}
if (!collide)
{
m_placeX++; //滚屏
m_nextCollideNPC = -1;
}
}
else
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6 + 16, m_posY + 16, 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 += 16; //滚屏
m_nextCollideNPC = -1;
}
}
}
}
}
else
{
row = (m_posY + 40) / 16;
col = (m_posX + 12) / 16;
if (row + 1 <= 10 && col + 1 <= 12)
{
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[1][m_nowFrame] * 24, m_posY + 6, 0);
break;
case 3: //向上走
if (m_collision.InBigMap())
{
if (row - 1 + m_placeY >= 0)
{
m_nextGrid = m_map.GetMapData(row - 1 + m_placeY, col + m_placeX);
if (m_collision.InCanGoGrid(m_nextGrid))
{
if (row <= 6 && m_placeY - 1 >= 0)
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6, m_posY + 16, 18, 32, m_npc[i].getPosX() + 6, m_npc[i].getPosY() + 3 + 16, 8, 14))
{
collide = true; //与第 i 个 NPC 碰撞
m_nextCollideNPC = m_npc[i].getID();
break;
}
}
if (!collide)
{
m_placeY--; //滚屏
m_nextCollideNPC = -1;
}
}
else
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6, m_posY + 16 - 16, 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_posY -= 16; //滚屏
m_nextCollideNPC = -1;
}
}
}
}
}
else
{
row = (m_posY + 40) / 16;
col = (m_posX + 12) / 16;
if (row - 1 >= 0 && col + 1 <= 12)
{
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[2][m_nowFrame] * 24, m_posY + 6, 0);
break;
case 4: //向左走
if (m_collision.InBigMap())
{
if (col - 1 + m_placeX >= 0)
{
m_nextGrid = m_map.GetMapData(row + m_placeY, col - 1 + m_placeX);
if(m_collision.InCanGoGrid(m_nextGrid))
{
if (col <= 5 && m_placeX - 1 >= 0)
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6, m_posY + 16, 18, 32, m_npc[i].getPosX() + 6 + 16, m_npc[i].getPosY() + 3, 8, 14))
{
collide = true; //与第 i 个 NPC 碰撞
m_nextCollideNPC = m_npc[i].getID();
break;
}
}
if (!collide)
{
m_placeX--; //滚屏
m_nextCollideNPC = -1;
}
}
else
{
boolean collide = false; //是否碰撞
for (int i = 0; i < m_npc.length; i++) //与当前场景中所有 NPC 都进行碰撞检测
{
if (m_npc[i].getSceneID() == 1 && //是否是大场景中的一个NPC
RectInRect(m_posX - 6 - 16, m_posY + 16, 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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -