【问题标题】:Detecting collisions of enemies检测敌人的碰撞
【发布时间】:2023-03-23 10:10:01
【问题描述】:

我需要在 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.
            }
        }

【问题讨论】:

  • 每两个敌人检查他们的位置是否相同,类型是否相同。
  • 抱歉,我们无法为您提供更有帮助的答案,除非您向我们提供有关您的申请的更多详细信息

标签: c# xna collision-detection


【解决方案1】:

要确定两个敌人是否相撞,您需要找到每个敌人所在的矩形。然后您可以使用Rectangle.Intersects(Rectangle) 找出它们是否重叠。

回复:编辑:

每个敌人总是在检查是否与自己发生碰撞。不是你想要的:(|)

你想要这样的东西:

foreach (Enemy enemy1 in enemies)
{
    foreach (Enemy enemy2 in enemies)
    {
        if (enemy1 != enemy2 && enemy1.BoundingRectangle.Intersects(enemy2.BoundingRectangle))
        {
            // enemy1 is colliding!
        }
    }
}

【讨论】:

  • 如果我这样做,所有敌人都认为他们正在碰撞,这就是我在问这个问题之前尝试过的。
  • 在使用 Intersects 方法进行测试之前,我需要知道如何区分敌方对象。
  • 然后检查两个敌人是否为同一类型。根据您提供的信息,我只能说这些了。
  • 那有什么关系?如果每个敌人只是 Enemy 类的一个对象,那么它们都是一样的,所以如果我检查碰撞,总是会与自己发生碰撞。明白了吗?
  • 你听起来好像你有几种类型的敌人,它们只会与它们的类型发生冲突。如果你遇到一个敌人与自己相撞的问题,那么在你的碰撞例程中,你当然需要检查这两个敌人是否不是同一个敌人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多