使用for循环在其他类中访问列表

时间:2013-07-21 18:39:30

标签: c# reference null

我在这里有一个真正的脑筋急转弯,我无法弄清楚我做错了什么,因为代码看起来绝对正常。

背景资料不多: 由于我已经开始在XNA / MonoGame环境中工作大约2天了,所以我想从容易开始的事情开始。我正在建造像游戏一样的星形防御者,我正在进行碰撞检查。在我碰到碰撞之前,我发现当我使用for循环遍历列表中的所有敌人时,我得到了一个相当奇怪的空引用。然而,该列表在另一个类中。

启动后,我启动了一个SpawnManager类,当类完成后立即创建20个敌人:

class SpawnManager
{
    //Draw
    ContentManager myContentManager;

    //Enemies
    public List<Enemy> enemy = new List<Enemy>();

    public void LoadContent(ContentManager theContentManager)
    {
        myContentManager = theContentManager;

        for (int i = 0; i < 20; i++)
        {
            Enemy newEnemy = new Enemy(new Vector2((800 / (20 + 1) * i + 16.5f), 20), 500, 50, 25, 10, 2500, 100, 1, 3, 2, false);
            newEnemy.LoadContent(myContentManager);
            enemy.Add(newEnemy);
        }
    }

然后每当我用宇宙飞船发射子弹时,它都会创建一个类似的子弹:

public class Bullet : PlayerScript
{
    //Enemy enemy;
    SpawnManager spawnManager;
    PlayerScript playerScript;

    private Texture2D _bullet;
    private Rectangle _hitBox;
    public float xPos = 0;
    public float yPos = 0;

    public bool isActive = false;

    public void LoadContent(ContentManager theContentManager)
    {
        _bullet = theContentManager.Load<Texture2D>("Graphics/citem");
        _hitBox = new Rectangle(0, 0, _bullet.Width, _bullet.Height);
    }

    public void Update(GameTime gameTime)
    {
        //Movement.
        yPos -= 13.5f;

        //Collision.
            for (int i = 0; i < spawnManager.enemy.Count; i++)
            {
                //Console.WriteLine(spawnManager.enemy.Count);
            }
     }

当我持有空间来发射子弹时,我立即得到一个空引用错误,高亮显示for循环部分。我在互联网上看到一些帖子说敌人列表可能是空的或空的,但即使是这种情况,这应该不重要,因为我的代码结构如下:

Game1初始化 - &gt;添加SpawnManager - &gt;添加敌人+将其推入敌人列表。

因此当敌人在屏幕上时,他们基本上已经被添加到敌人列表中,并且列表不应该为空或空。

此外,是否有更简单或更有效的方法来检查碰撞?因为每当我创建一个子弹时,bullet.Update脚本将开始循环遍历所有敌人,如疯子,直到它到达敌人,检查它是哪个敌人,对其应用更改并将其自身添加到池中。 (当然在游泳池中我不会更新Bullet脚本)。由于这个星形防御者更像是一个小小的子弹地狱,每几秒射出100发子弹,总会造成很多循环。我在Unity工作了1.5年之后,刚刚来到XNA / MonoGame C#,在Unity中,一切看起来都很简单,OnCollisionEnter ftw! :)

尽管如此,我很确定我的ID-10-T总错误,但我无法绕过它,任何帮助都会感激不尽:)

P.S:如果说不清楚,我很乐意编辑这个问题!

0 个答案:

没有答案