请教前辈 蛋疼的问题啊
做了一个类似泡泡堂的游戏下面的代码
public bool IsMove(GameRole role)
{
int newX = role.X;
int newY = role.Y;
//前进一步,记录改变的坐标点
switch (role.direction)
{
case Direction.Down:
newY += role.Speed;
break;
case Direction.Left:
newX -= role.Speed;
break;
case Direction.Right:
newX += role.Speed;
break;
case Direction.Up:
newY -= role.Speed;
break;
}
//窗体临界点检测
if (newX < 0 || newX > (UtilityResource.MapCols - 1) * UtilityResource.GridSize || newY < 0 || newY > (UtilityResource.MapRows - 1) * UtilityResource.GridSize)
{
return false;
}
for (int i = 0; i < GameRole.UtilityResource.MapCols - 1; i++)
{
for (int j = 0; j < GameRole.UtilityResource.MapRows - 1; j++)
{
//石墙、木箱、炸弹障碍检测 问题出在这里 newX newY代表人物在窗口上的坐标i * UtilityResource.GridSize j * UtilityResource.GridSize表示障碍物的坐标 下面定义了一个类检测 人物所在坐标处的矩形和障碍物所在处的矩形是否相交 下面的if条件只检测前面两个的话可行 但是当人物放出炸弹Bomb时 炸弹矩形和人物矩形在放出炸弹时就相交了 人物无法移动 怎么实现人物放出炸弹能穿过炸弹 当人物穿过炸弹后就不能穿过炸弹了 望解决啊 阿门 这个问题纠结了我半天了
if (GameMap.Grids[i, j] == GameMap.GridType.Stone || GameMap.Grids[i, j] == GameMap.GridType.Soil||GameMap.Grids[i, j] == GameMap.GridType.Bomb)
{
if (HitCheck.IsIntersect(i * UtilityResource.GridSize, j * UtilityResource.GridSize, newX, newY))
{
return false;
}
}
}
}
return true;
}
/// <summary>
/// 碰撞检测类
/// </summary>
public class HitCheck
{
/// <summary>
/// 判断物体是否相交
/// </summary>
/// <param name="x1">对象1 X坐标</param>
/// <param name="y1">对象1 Y坐标</param>
/// <param name="x2">对象2 X坐标</param>
/// <param name="y2">对象2 Y坐标</param>
/// <returns></returns>
public static bool IsIntersect(int x1, int y1, int x2, int y2)
{
Rectangle r1 = new Rectangle(x1, y1, UtilityResource.GridSize, UtilityResource.GridSize);
Rectangle r2 = new Rectangle(x2, y2, UtilityResource.GridSize - 4, UtilityResource.GridSize - 3);
//判断对象是否相交
if (r1.IntersectsWith(r2))
{
return true;
}
return false;
}
}