我的玩家碰撞无法正常工作

时间:2011-12-16 16:59:27

标签: c# xna collision-detection

由于玩家只是站在起始位置x10 y10

,因此该线路正在运行,但是这些线路出现了问题。
for (int i = 0; i < sprites.Length; i++)
            {
                if (player.Top > sprites[i].Top && player.Bottom < sprites[i].Top) //Checking for intersection at the top of the player
                {
                    player_Collision1 = true; //Found collision
                }

                else if (player.Bottom > sprites[i].Top && player.Bottom < sprites[i].Bottom) //Checking for intersection at the bottom of the player
                {
                    player_Collision2 = true; //Found collision
                }

                else if (player.Left > sprites[i].Right && player.Left < sprites[i].Left) //Checking for intersection at the left of the player
                {
                    player_Collision3 = true; //Found collision
                }

                else if (player.Right > sprites[i].Left && player.Right < sprites[i].Right)//Checking for intersection at the right of the player
                {
                    player_Collision4 = true; //Found collision
                }
            }

我正在使用XNA的矩形,播放器是一个矩形的名称,精灵是玩家可以碰撞的所有矩形的数组.XNA矩形可以让你获得矩形边的坐标我这样做:玩家。顶级玩家。底部等等。

1 个答案:

答案 0 :(得分:2)

逻辑真的搞砸了。第一个if永远不会是真的,因为player.top不能低于sprite.top和sprite.top上方的player.bottom。我认为你的意思是(player.Top > sprites[i].Top && player.Bottom < sprites[i].Bottom)即使它仍然存在,当它们不碰撞时它会评估为真。看看这张照片为什么。您还需要检查X轴以确定正确的碰撞

其他if与第一个问题相同。两者都在比较底部/顶部和顶部/底部,并在没有碰撞时返回true。话虽如此,我试图做一个穷人的“视线”场景,你只想看看玩家是否站在精灵可以“看到”的位置,我错了。

我建议您查看App Hub网站上提供的platformer starter kit以及其中的一些documention。具体来说,看一下碰撞检测(在Player.cs CheckCollision()...或HandleCollision()中我会忘记确切的名称。应该很明显。)你将能够看到他们如何确定玩家碰撞的方向。他们使用它来查看玩家是否可以跳过一个平台,但不会通过它。