簡體   English   中英

矩形包含點返回 false

[英]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;
    }
}

循環后第一個為,第二個為,第三個為,第四個為

為了讓大家更好的理解,我附上這張圖: http://i.imgur.com/hvLKNOy.png

任何幫助表示贊賞。

您的問題是您正在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM