0

我目前正在为学校的评估重新制作游戏,如果我做错了什么,请原谅我。我试图制作一个 foreach 循环,以便将敌机的数量绘制到屏幕上。我在更新游戏时间中做了 1 个循环。错误是“NullReferenceException was Unhandled”,下面是“Object Reference not set to an instance of the object”。相同的代码在我们在课堂上制作的另一个“实践”游戏中工作,所以我不确定我做错了什么。

        foreach (EnemyPlane ball in enemyplaneObjects)
        {
            ball.Update();
        }

另一个在平局更新中。

        foreach (EnemyPlane ball in enemyplaneObjects)
        {
            ball.Update();
        }

另一件要考虑的事情是,两个“球”引用的值都是空的,并且没有在数组或 spritebatch 中声明。

这是精灵批处理。

    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;



    Texture2D truckTexture;
    Vector2 truckPosition;

    Texture2D planeTexture;
    Vector2 planePosition;


    Texture2D backgroundTexture;
    Vector2 backgroundPosition;

    Texture2D enemyplaneTexture;
    Vector2 enemyplanePosition;
    int enemyplaneCount = 5;



    Texture2D personTexture;
    Vector2 personPosition;
    Parachute personObject;

    Vector2 spriteVelocity = new Vector2(0.5f, 0f);

    Random rand = new Random();

   EnemyPlane[] enemyplaneObjects;

这就是数组。

        enemyplaneObjects = new EnemyPlane[enemyplaneCount];

        for (int index = 0 ; index < enemyplaneCount; index++)
        {
            byte r = (byte)rand.Next(64, 256); //Red Value
            byte g = (byte)rand.Next(64, 256); //Green Value
            byte b = (byte)rand.Next(64, 256); //Blue Value
            byte a = (byte)rand.Next(64, 256); //Alpha Value
            Color tempColor = new Color(r, g, b, a);
            enemyplaneObjects[0] = new EnemyPlane(EnemyPlane.Texture, new Vector2(rand.Next(2, 100), rand.Next(2, 100)), new Vector2(rand.Next(-2, 20), rand.Next(-2, 20)), tempColor);

        }

提前致谢。

4

1 回答 1

2

您将需要使用正在迭代的变量来初始化数组。到目前为止,您只初始化数组中的第一个条目。当您稍后在 foreach 中遍历它们时,对 Update() 的调用仅适用于第一个条目,下一个将引发异常。

enemyplaneObjects[index] = new EnemyPlane(EnemyPlane.Texture, new Vector2(rand.Next(2, 100), rand.Next(2, 100)), new Vector2(rand.Next(-2, 20), rand.Next(-2, 20)), tempColor);
于 2013-05-31T03:34:39.577 回答