我在Visual Studio中使用c#制作简单的Pacman游戏。我决定制作一个迷宫的长方形,主角可以走路。我有一个覆盖主角边界的矩形:
Rectangle _pacmanBound = new Rectangle(Left, Top, 28, 28);
然后我取这个矩形的4个点(左上角,左下角,右上角和右下角)。 我还有一个包含pacman可以走的矩形区域的List:
map = new List<Rectangle>();
map.Add(new Rectangle(12, 375, 430, 28));
map.Add(new Rectangle(12, 403, 28, 97));
map.Add(new Rectangle(12, 470, 430, 28));
现在我想检查所有这4个点是否属于列表中的任何矩形(因此它表明该区域是可行走的):
foreach (Rectangle r in _maze.map)
{
if (r.Contains(_pacmanBound.X, _pacmanBound.Y))
{
topLeft = true;
}
else if (r.Contains(_pacmanBound.X, _pacmanBound.Y + _pacmanBound.Height))
{
bottomLeft = true;
}
else if (r.Contains(_pacmanBound.X + _pacmanBound.Width, _pacmanBound.Y))
{
topRight= true;
}
else if (r.Contains(_pacmanBound.X + _pacmanBound.Width, _pacmanBound.Y + _pacmanBound.Height))
{
bottomRight = true;
}
}
循环后第一个是 true ,第二个是 false ,第三个是 false ,第四个是 false
感谢任何帮助。
答案 0 :(得分:1)
您的问题是您正在使用else
条款。因此,如果第一个if
子句为真,则程序不会检查其他if
子句。您需要删除else
子句:
foreach (Rectangle r in _maze.map)
{
if (r.Contains(_pacmanBound.X, _pacmanBound.Y))
{
topLeft = true;
}
if (r.Contains(_pacmanBound.X, _pacmanBound.Y + _pacmanBound.Height))
{
bottomLeft = true;
}
if (r.Contains(_pacmanBound.X + _pacmanBound.Width, _pacmanBound.Y))
{
topRight= true;
}
if (r.Contains(_pacmanBound.X + _pacmanBound.Width, _pacmanBound.Y + _pacmanBound.Height))
{
bottomRight = true;
}
}
此外,您不必检查pacman矩形的每个点。如果地图矩形包含pacman矩形,您可以检查:
foreach (Rectangle r in _maze.map)
{
if (r.Contains(_pacmanBound))
{
isPacmanInsideMaze = true;
break;
}
}