只有列表的最后一个成员给出矩形交点xna
本文关键字:xna 列表 最后一个 成员 | 更新日期: 2023-09-27 18:03:03
这是一个类似的问题,我张贴在这里:只有最后一个成员的列表正在更新
我有一个玩家列表(用于多人游戏)和一个块列表(基本上是带有指定位置和矩形的纹理)。
我有一个名为Collision Engine
的函数,该函数假定检测列表中每个块与播放器之间的碰撞。
这是我用来检测玩家是否与任何块相交的函数(在这种情况下是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
类中的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;
}
}
}