我目前正在重拍一款游戏,以便在学校进行评估,所以请原谅我,如果我做错了什么的话。我试图制作一个foreach循环,以便将大量的敌机拉到屏幕上。我在更新游戏时间里制作了一个循环。错误是“NullReferenceException未处理”,下面是“对象引用未设置为对象的实例”。这个代码在我们在课堂上制作的另一个“实用”游戏中起作用,所以我不确定我做错了什么。
foreach (EnemyPlane ball in enemyplaneObjects)
{
ball.Update();
}
和另一个抽奖更新。
foreach (EnemyPlane ball in enemyplaneObjects)
{
ball.Update();
}
另外要考虑的是,“ball”引用的值都是null,并且未在数组或spritebatch中声明。
这是一个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);
}
提前致谢。
答案 0 :(得分: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);