只有列表的最后一个成员给出矩形相交 xna
Only last member of a list gives a Rectangle Intersect xna
这与我在此处发布的问题类似:Only last made member of a list is updating
同样,我有一个玩家列表(用于多人游戏目的)和一个块列表(基本上是一个具有指定位置和矩形的纹理)。
我有一个名为 Collision Engine
的函数,应该 检测列表中每个块与玩家之间的碰撞。
这是我用来尝试检测玩家是否与 any 方块相交的函数(在本例中为 500 棵随机生成的树)。
foreach (Blocks b in main.initializer.blocklist)
{
foreach (Player p in main.initializer.playerlist)
{
if (p.Hitbox.Intersects(b.box))
{
p.intersection = true;
}
else
{
p.intersection = false;
}
}
}
起初我以为它根本没有检测到碰撞,但后来我注意到它是检测碰撞,但是它只检测到最后放置的方块列表(在将树的数量限制为 1,然后 2 之后计算出来)。
如果有人能向我解释如何解决这个问题,我们将不胜感激。
我有第二个选项,如果需要,可以将相交检测移动到 Blocks
class 中的 switch
语句中,这样可以解决吗?
您将在循环的每次迭代中覆盖 p.Intersection。
不要在循环中将其设置为 false。将其设置为默认值 false,然后在检测到碰撞时将其更改为 true。
编辑:您还需要将播放器放在外环,将方块放在内环。
foreach (Player p in main.initializer.playerlist)
{
p.intersection = false;
foreach (Blocks b in main.initializer.blocklist)
{
if (p.Hitbox.Intersects(b.box))
{
p.intersection = true;
break;
}
}
}
这与我在此处发布的问题类似:Only last made member of a list is updating
同样,我有一个玩家列表(用于多人游戏目的)和一个块列表(基本上是一个具有指定位置和矩形的纹理)。
我有一个名为 Collision Engine
的函数,应该 检测列表中每个块与玩家之间的碰撞。
这是我用来尝试检测玩家是否与 any 方块相交的函数(在本例中为 500 棵随机生成的树)。
foreach (Blocks b in main.initializer.blocklist)
{
foreach (Player p in main.initializer.playerlist)
{
if (p.Hitbox.Intersects(b.box))
{
p.intersection = true;
}
else
{
p.intersection = false;
}
}
}
起初我以为它根本没有检测到碰撞,但后来我注意到它是检测碰撞,但是它只检测到最后放置的方块列表(在将树的数量限制为 1,然后 2 之后计算出来)。
如果有人能向我解释如何解决这个问题,我们将不胜感激。
我有第二个选项,如果需要,可以将相交检测移动到 Blocks
class 中的 switch
语句中,这样可以解决吗?
您将在循环的每次迭代中覆盖 p.Intersection。 不要在循环中将其设置为 false。将其设置为默认值 false,然后在检测到碰撞时将其更改为 true。
编辑:您还需要将播放器放在外环,将方块放在内环。
foreach (Player p in main.initializer.playerlist)
{
p.intersection = false;
foreach (Blocks b in main.initializer.blocklist)
{
if (p.Hitbox.Intersects(b.box))
{
p.intersection = true;
break;
}
}
}