【问题标题】:Bullet list collision isn't colliding with enemy list子弹列表碰撞没有与敌人列表碰撞
【发布时间】: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


【解决方案1】:

已修复 - 感谢人们的帮助。咒语边界框的 y 坐标有问题 - 我从没想过要检查它,因为我的游戏中的碰撞都是基于 x 坐标的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2019-08-12
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2022-01-11
    • 2023-03-23
    相关资源
    最近更新 更多