我得到了一个名为物体和子弹列表的敌人名单。
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个列表的冲突? 有没有办法将其转换为Rectangle? 被困在这几个小时,真的无法弄清楚。
答案 0 :(得分:2)
我通常都拥有所有精灵来自普通类型。雪碧,GameEntity等等。该基本类型将公开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
来获得一个包含该对象的矩形。