递归类列表
本文关键字:列表 递归 | 更新日期: 2023-09-27 17:49:44
我目前正在做一个c# XNA课程,这是他们实现子弹头的方式。他们说类将自动遍历列表(bullList)。目前这对我不起作用。谁能给我一个线索,我做错了什么,或指出我的一个工作版本的例子?提前感谢
class Bullet
{
public Vector2 position;
public Vector2 velocity;
public Texture2D texture;
public float speed;
public Rectangle rectangle;
public Vector2 size = new Vector2(16, 16);
public List<Bullet> bullList = new List<Bullet>();
public enum Owner
{
PLAYER,
ENEMY
}
public Bullet()
{
Update();
}
public void Update()
{
rectangle = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y);
position += (velocity * speed);
}
public void Draw(SpriteBatch spriteBatch, Texture2D a_texture)
{
spriteBatch.Draw(a_texture, position, Color.White);
}
public void Shoot(Vector2 a_position, Vector2 a_velocity, float a_speed, Texture2D a_texture)
{
Bullet newBullet = new Bullet();
newBullet.position = a_position;
newBullet.velocity = a_velocity;
newBullet.speed = a_speed;
newBullet.texture = a_texture;
newBullet.isAlive = true;
bullList.Add(newBullet);
}
}
你的draw和update函数都在bullet的"main"实例上工作。相反,您需要运行foreach:
foreach (Bullet b in bullList)
{
b.rectangle = new Rectangle((int)b.position.X, (int)b.position.Y, (int)b.size.X, (int)b.size.Y);
b.position += (b.velocity * b.speed);
}
和一个类似的draw循环。
话虽如此,我不会这样做。子弹不"有"子弹,但子弹管理器可能会这样想。换句话说,你的主"项目"有一个包含所有"实际"项目的列表,所有的位置变量都没有被使用,而"实际"项目有一列它们并不真正需要的子项目,但它们使用了所有的位置变量。对我来说,这听起来像是两个不同对象的好例子:)。
我注意到的其他一些事情,"Owner"枚举从未使用过,也没有"IsAlive"属性。这可能只是稍后添加的,但是缺少"IsAlive"可能会在测试中"触发"足够多之后导致性能问题。