我需要检测XNA中同类型敌人的碰撞 如果发现碰撞,我希望敌人转身向另一个方向行走。
如果我将所有实例保存到列表中,如何检测不同(但相同)类型的敌人是否发生碰撞?
这是在C#XNA中。
编辑:我有一个名为“Enemy”的敌人,我游戏中的所有敌人都是从这个类中创建的,我需要能够检查敌人是否发生了碰撞。编辑2:
以下是代码示例:
// Fields.
private List<Enemy> enemies = new List<Enemy>();
// Add our enemies when we need to.
enemies.Add(new Enemy(this, position, spriteSet));
// Here is it's update method.
private void UpdateEnemies(GameTime gameTime)
{
foreach (Enemy enemy in enemies)
{
enemy.Update(gameTime);
// This code works because it's comparing the player.
if (enemy.BoundingRectangle.Intersects(Player.BoundingRectangle))
{
OnPlayerKilled(enemy);
}
// This code is always ture because enemy is enemy I can't figure out how to solve this.
if (enemy.BoundingRectangle.Intersects(enemy.BoundingRectangle))
{
// Make enemies turn... This if statement is the problem.
}
}
答案 0 :(得分:2)
要确定两个敌人是否发生了碰撞,您需要找到每个敌人占据的矩形。然后,您可以使用Rectangle.Intersects(Rectangle)
来确定它们是否重叠。
回复:编辑:
每个敌人总是在检查与自身的碰撞。不是你想要的:(|)
这样的事情就是你想要的:
foreach (Enemy enemy1 in enemies)
{
foreach (Enemy enemy2 in enemies)
{
if (enemy1 != enemy2 && enemy1.BoundingRectangle.Intersects(enemy2.BoundingRectangle))
{
// enemy1 is colliding!
}
}
}