【发布时间】:2015-04-10 10:31:18
【问题描述】:
好的,我正在制作一款 2D 平台游戏,我即将进入收尾阶段。我已经让子弹开火了,我的人工智能也在工作等等。但是我遇到了一个问题,当我尝试查看子弹的边界框是否与敌人发生碰撞时,它应该杀死敌人。但是它们不会发生碰撞 - 我必须通过 console.writeline 检查来查看咒语的边界框是否正在更新,它是更新的,并且对于敌人也是如此。碰撞的代码是这样的:
foreach (EnemyClass enemy in enemies)
{
for (int i = 0; i < spells.Count; i++)
{
if (enemy.collisionBox.Intersects(spells[i].boundingBox))
{
Console.WriteLine("Collision");
enemy.enemyHP -= spells[i].damageToDeal;
spells.ElementAt(i).isVisible = false;
}
if (enemy.enemyHP == 0)
{
enemy.isAlive = false;
}
}
}
这是法术类中的更新函数:
public void Update(GraphicsDevice graphics)
{
boundingBox = new Rectangle((int)position.X, (int)position.Y, 15, 15);
}
【问题讨论】:
-
它有时有效还是总是失败?
-
您是否尝试过绘制边界框以查看它们是否也移动?这是 xna/mono 吗?
-
盒子是什么?你测试了 spell.boundingBox.Intersects(enemy.collisionBox) 吗?
-
Pawel - 是的,它总是失败。我在 intersects if 语句中有一个 console.writeline。 Sayse - 是的,我使用了 console.writeline 并输出了边界框的坐标,它们确实移动了。 Nathan Cooper - 我假设你的意思是我在 if 语句中放置了一个 console.writeline 来查看它是否有效。我已经这样做了,不,它不起作用。方框是矩形。 (我在游戏中的其他地方使用相同的盒子与其他东西发生碰撞)
-
您包含的代码不会真正显示问题,我想这取决于您如何移动边界框,如果您将它们绘制到屏幕上,这将变得很明显跨度>
标签: c# list collision detection