递归类列表

时间:2014-03-12 23:22:36

标签: c# xna game-engine

我目前正在进行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);
    }
}

1 个答案:

答案 0 :(得分:3)

你的平局和更新功能都在&#34; main&#34;子弹的实例。相反,你需要运行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);
}

与绘制循环类似。

话虽如此,我不会这样做。子弹没有&#34;有&#34;子弹,BulletManager可能会。换句话说,你的主要&#34;子弹&#34;列出了所有&#34;实际&#34;子弹,所有的位置变量都没有被使用,并且&#34;实际的&#34;子弹有一个他们并不真正需要的子弹的列表,但他们使用所有的位置变量。听起来对我来说是两个不同对象的好例子:)。

我注意到的其他一些事情,&#34;所有者&#34; enum从未使用过,也不会使用&#34; IsAlive&#34;属性。这可能会在以后添加,但缺乏&#34; IsAlive&#34;足以引发性能问题&#34;火灾&#34;在测试中。