[英]Rectangle contains Point returns false
我正在 Visual Studio 中使用 c# 制作一個簡單的 Pacman 游戲。 我決定制作一個迷宮的矩形,主角可以在其中行走。 我有一個覆蓋主角邊界的矩形:
Rectangle _pacmanBound = new Rectangle(Left, Top, 28, 28);
然后我取這個矩形的 4 個點(左上角、左下角、右上角和右下角)。 我還有一個帶有 pacman 可以行走的矩形區域的列表:
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;
}
}
循環后第一個為真,第二個為假,第三個為假,第四個為假
任何幫助表示贊賞。
您的問題是您正在使用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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.