C# 我的播放器碰撞无法正常工作
这台机器正在工作,但由于玩家只是站在起跑位置x10 y10,所以这条线有点不对劲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
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,否则你将检查到无穷大。我在想,如果球员头部跳入他上方的一个街区,那么它应该会相撞。