C# 我如何在太空入侵者游戏中执行子弹/敌人矩形碰撞检测?

C# 我如何在太空入侵者游戏中执行子弹/敌人矩形碰撞检测?,c#,xna,2d,collision-detection,C#,Xna,2d,Collision Detection,我最近发布了一个关于发射子弹的问题,我(当然是在帮助下)设法弄明白了。我现在有一个新的问题,我无法找出子弹和敌人之间的碰撞检测。我不想一次发布我所有的代码,所以下面是我的类列表,我将根据您的要求发布其中的代码: C按钮(这只是一个“播放”按钮,不需要帮助) 子弹 游戏1 敌人 另外,这只是我的第二篇博文,对我放松点;)注意:玩家只能左右移动,敌人在海峡线上从上到下移动(如果这有帮助的话)我想你必须检查子弹是否进入了一个船舰当前占领的区域,如果是这样,摧毁它并移除子弹。如果您发布相关代码,可能

我最近发布了一个关于发射子弹的问题,我(当然是在帮助下)设法弄明白了。我现在有一个新的问题,我无法找出子弹和敌人之间的碰撞检测。我不想一次发布我所有的代码,所以下面是我的类列表,我将根据您的要求发布其中的代码:

  • C按钮(这只是一个“播放”按钮,不需要帮助)
  • 子弹
  • 游戏1
  • 敌人

另外,这只是我的第二篇博文,对我放松点;)注意:玩家只能左右移动,敌人在海峡线上从上到下移动(如果这有帮助的话)

我想你必须检查子弹是否进入了一个船舰当前占领的区域,如果是这样,摧毁它并移除子弹。如果您发布相关代码,可能会有所帮助。:)

这是我以前使用过的一种非常简单的方法。围绕项目符号设置一个矩形:

Rectangle bulletRect = new Rectangle(bulletPosition.X, bulletPosition.Y, bulletText.Width, bulletText.Height);
敌人也是这样:

Rectangle enemyRect = new Rectangle(enemyPosition.X, enemyPosition.Y, enemyText.Width, enemyText.Height);
然后,在测试碰撞时,您可以使用:

if(bulletRect.Intersects(enemyRect))
{
   //We have a collision
}

很抱歉,我是编程新手,但我是否将矩形语句放在类子弹头方法中?如果是这样的话,我到底需要把这个if语句放在哪里呢?if语句应该放在游戏更新事件中,毕竟你要经常检查碰撞。至于矩形,你需要一个属性来保存它们,一个用于子弹类,一个用于敌人类。或者你可以有一个基类来保存一个矩形,以及其他常见的共享属性,然后让你的敌人/玩家/子弹对象从中继承,例如:
player:GameObject
。你说的“保存它们的属性”是什么意思(如果这是一个愚蠢的问题,很抱歉lol)。公共矩形bulletRectangle{get{返回新矩形(position.X,position.Y,texture.Width,texture.Height);}set{}这是设置此属性的正确方法吗?如果是,我需要在“set”语句中放入什么?您将拥有一个内部使用的私有变量,例如
private Rectangle\u enemyRect;
然后您将拥有属性
Public Rectangle EnemyRectangle{get{return enemyRect;}set{u enemyRect=value;}
这样,你的敌人对象的每个实例都有自己的关联矩形。如何填充矩形取决于你。嘿,肖恩,我在一个论坛上学习了一个教程,它告诉我将此代码放入各自的类中:public rectangle bulletRectangle(){return new rectangle((int)position.X,(int)position.Y,(int)texture.Width,(int)texture.Height);}然后使用嵌套for循环(我已经删除了该循环)但是这不起作用,你会知道缩进我的代码片段的标记吗?我不认为你能在注释中看到。:)嵌套的for循环可能正在检查冲突。是的,我想他们提到了,但在其中一行中,我想它类似于:if(bullet.bulletRectangle.Intersects(敌方.enemyRectangle())我不断地犯错误,记不起它说了什么:(重复你所做的事情以得到错误,你就不必记得了。)