碰撞检测不起作用

时间:2012-03-09 23:17:02

标签: c# collision-detection xna-4.0

我在Update()部分进行了碰撞检测,这是代码:

            if (player.playerRect.Intersects(turtleRect))
        {
            turtleRect.X = turtleRect.X - 60;
        }

当我运行游戏并与乌龟碰撞时,没有任何反应。我试过改变

turtleRect.X = turtleRect.X - 60;

turtleRect.X = turtleRect.X - 600;

因为我以为我没有注意到这种变化。然而,什么也没发生。然后我认为这只是

turtleRect.X = turtleRect.X - 600

所以我把它放在了if语句之外的Update()方法中并且它起作用了。现在我意识到这是

                if (player.playerRect.Intersects(turtleRect))
        {

        }

但我无法弄清楚这有什么问题。我将playerRect放在另一个类中,但是我将它导入了主类。我知道矩形正在移动,因为

            turtleRect.X -= 1;
在Update()方法中

。 乌龟在屏幕上移动。我已经测试了很多东西,然后查了一下,我仍然无法弄明白。这是矩形碰撞,所以有人也可以指导我如何进行每像素碰撞吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我们确实需要更多的信息,可能是你没有在碰撞后更新坐标或其他一百万个。您是否使用调试器逐步执行应用程序以确定碰撞后发生的情况?其次:

if (playerRect.Intersects(turtleRect))
{
   turtleRect.X = turtleRect.X - 60;
}

这不是碰撞解决方案,如果碰撞来自X轴左侧,您需要查看更强大的内容,它只会产生部分成功的效果。 XNA平台发射器套件具有相当全面的碰撞检测功能,这可能是一个很好的起点。

答案 1 :(得分:0)

我解决了这个问题,我刚补充说:

playerRect = new Rectangle((int)player.position.X, (int)player.position.Y, player.playerRect.Width, player.playerRect.Height);

感谢您的帮助!