使用列表进行冲突检测
本文关键字:冲突检测 列表 | 更新日期: 2023-09-27 18:33:08
我得到了一个叫做物体的敌人列表和一个子弹列表。
private List<enemyObjects> objects = new List<enemyObjects>();
list
对象位于 Game1 类中。
我用这种方法在列表中添加和删除敌人:
public void LoadEnemies() {
int Y = 100;
if (spawn >= 1)
{
spawn = 0;
if (objects.Count() < 4)
objects.Add(new enemyObjects(Content.Load<Texture2D>("obstacle"), new Vector2(1100, Y)));
}
for (int i = 0; i < objects.Count; i++)
{
if (!objects[i].isVisible)
{
//If the enemy is out of the screen delete it
objects.RemoveAt(i);
i--;
}
}
}
我还得到了一份项目符号列表:public List<Bullet> bullets = new List<Bullet>();
我发射子弹的方法:
private void ShootFireBall() {
if (mCurrentState == State.Walking)
{
bool aCreateNew = true;
foreach (Bullet aBullet in bullets)
{
if (aBullet.bulletVisible == false)
{
aCreateNew = false;
aBullet.Fire(position + new Vector2(Size.Width / 2, Size.Height / 2),
new Vector2(200, 0), new Vector2(1, 0));
}
}
if (aCreateNew)
{
Bullet aBullet = new Bullet();
aBullet.LoadContent(contentManager, "bullet");
aBullet.Fire(position + new Vector2(Size.Width / 2, Size.Height / 2),
new Vector2(200, 0), new Vector2(1, 0));
bullets.Add(aBullet);
}
}
}
问题是我需要一个矩形,所以我可以检查是否有碰撞。如何检查与 2 个列表的冲突?有没有办法将其转换为矩形?被困在这个上面几个小时,真的想不通。
我通常让我所有的精灵都派生自一个常见的类型。雪碧,游戏实体,随便什么。该基类型将公开Bounds
、Location
等属性。
像这样:
public abstract class Sprite
{
public Vector2 Location { get; set; }
public Rectangle Bounds
{
get
{
return new Rectangle((int)Location.X, (int)Location.Y,
_texture.Width, _texture.Height);
}
}
private Texture2D _texture;
public Sprite(Texute2D texture)
{
_texture = texture;
}
}
public class enemyObjects : Sprite
{
// enemy-specific properties go here
public enemyObjects(Texture2D texture)
: base(texture)
{
}
}
public class Bullet : Sprite
{
// Bullet-specific properties go here
public Bullet(Texture2D texture)
: base(texture)
{
}
}
然后,您可以简单地使用 objects[i].Bounds
来获取包含对象的矩形。