Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的播放器碰撞无法正常工作_C#_Xna_Collision Detection - Fatal编程技术网

C# 我的播放器碰撞无法正常工作

C# 我的播放器碰撞无法正常工作,c#,xna,collision-detection,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

这台机器正在工作,但由于玩家只是站在起跑位置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
                }
            }
for(int i=0;isprites[i].Top&&player.Bottomsprites[i].Top&&player.Bottomsprites[i]。Right&&player.Leftsprites[i]。Left&&player.Right

我用的是XNA矩形,player是一个矩形的名字,sprites是一个由玩家可以碰撞的所有矩形组成的数组,XNA矩形可以让你像我一样得到矩形边的坐标:player.Top player.Bottom等等。

逻辑真的很混乱。第一个
if
将永远不会为真,因为player.top不能低于sprite.top,player.bottom不能高于sprite.top。我想你的意思是,如果
(player.Top>精灵[I].Top&&player.Bottom
即使它们不碰撞,也会计算为真。看看这张图片,看看原因。您还需要检查X轴以确定正确的碰撞。

另一个
if
s的问题与第一个相同。比较底部/顶部和顶部/底部,并在没有碰撞时返回true。也就是说,如果你想做一个穷人的“视线”场景,你只想看看玩家是否站在精灵可以“看到”的位置,我错了


我建议您看看AppHub网站上提供的以及其中的一些。具体来说,查看碰撞检测(在Player.cs CheckCollision()或HandleCollision()中,我没有给出确切的名称。这应该很明显。)您将能够看到它们如何确定播放器碰撞的方向。他们用它来观察玩家是否能跳过平台,但不能从平台上摔下来。

你知道XNA有一种内置的
交叉
方法吗?如果定义两个矩形,可以使用它查看它们是否重叠。我需要根据不同的侧面发生不同的碰撞。也许这应该移动到gamedev.stackexchange.com?关于XNA的一切都是关于游戏的吗?尝试检测目标精灵的哪个边缘被其他精灵击中有点复杂。我还建议将这个问题转移到Gamedev。首先,你需要在每次检查中同时检查X和Y,否则你将检查到无穷大。我在想,如果球员头部跳入他上方的一个街区,那么它应该会相撞。