当前位置:  开发笔记 > 编程语言 > 正文

检测WPF Canvas上两个矩形之间的碰撞

如何解决《检测WPFCanvas上两个矩形之间的碰撞》经验,为你挑选了1个好方法。

我对编程非常陌生,而且我已经开始了C#.我现在正试图制作我的第一场比赛,我决定使用蛇.到目前为止,我一直在努力研究这个问题,但我看到的所有答案都与那些使用不同方法移动蛇的人有关.

我的程序使用两个双打(lefttop)来存储蛇在哪里Canvas.我的程序还使用两个双打作为游戏中的"食物",称为randomFoodSpawnLeftrandomFoodSpawnTop.

我的问题是这个.如何通过左侧和顶部值检测两个矩形对象之间的碰撞?我很困惑.

snakeWindow是窗口,snakeHead是代表蛇的矩形,是蛇left的左值,是蛇top的最高值.

void timer_Tick(object sender, EventArgs e)
    {
        double left = Canvas.GetLeft(snakeHead);
        double top = Canvas.GetTop(snakeHead);

        if (keyUp)
        {
            top -= 3;
        }
        else if (keyDown)
        {
            top += 3;
        }
        else if (keyLeft)
        {
            left -= 3;
        }

        else if (keyRight)
        {
            left += 3;
        }
        // These statements see if you have hit the border of the window, default is 1024x765
        if (left < 0)
        {
            left = 0;
            gameOver = true;
        }
        if (top < 0)
        {
            top = 0;
            gameOver = true;
        }
        if (left > snakeWindow.Width)
        {
            left = 0;
            gameOver = true;
        }
        if (top > snakeWindow.Height)
        {
            top = 0;
            gameOver = true;
        }
        // Statements that detect hit collision between the snakeHead and food
        //
        if (foodEaten == true)
        {
            spawnFood();
            textBlockCurrentScore.Text += 1;
        }

            // If gameOver were to be true, then the game would have to end. In order to accomplish this I display to the user that the game is over
            // and the snakeHead is disabled, and should restart.
            if (gameOver == true)
        {
            keyRight = false;
            keyLeft = false;
            keyUp = false;
            keyDown = false;
            top = 0;
            left = 0;

            textBlockGameOver.Text = "GAME OVER!";
            snakeCanvas.Background = Brushes.Blue;
        }


        Canvas.SetLeft(snakeHead, left);
        Canvas.SetTop(snakeHead, top);
    }

René Vogt.. 5

你可以用System.Windows.Rect.IntersectsWith.试试这样:

Rect rect1 = new Rect(left1, top1, widht1, height1);
Rect rect2 = new Rect(left2, top2, widht2, height2);

bool intersects = rect1.IntersectsWith(rect2);

当然,你必须检查蛇头的所有部位.



1> René Vogt..:

你可以用System.Windows.Rect.IntersectsWith.试试这样:

Rect rect1 = new Rect(left1, top1, widht1, height1);
Rect rect2 = new Rect(left2, top2, widht2, height2);

bool intersects = rect1.IntersectsWith(rect2);

当然,你必须检查蛇头的所有部位.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有