递归类列表

本文关键字:列表 递归 | 更新日期: 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"可能会在测试中"触发"足够多之后导致性能问题。