我正在为一个学校项目制作这个游戏,你可以在屏幕上显示不同类型的入侵者。
我的想法是创建一个带有texture2D引用“纹理”的数组,然后选择一个随机数组并将该引用分配给名为“texture”的新变量。
现在,当我启动程序时,它会抛出一个nullreferenceException。此外,它突出了我的纹理和纹理变量,并表示它们从未被分配给?这是代码:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace MonoGameInvaders
{
class Invader
{
public Vector2 position;
public Vector2 velocity;
public Texture2D [] textures;
public Texture2D texture;
public Invader()
{
textures[0] = Global.content.Load<Texture2D>("spr_red_invader");
textures[1] = Global.content.Load<Texture2D>("spr_blue_invader");
textures[2] = Global.content.Load<Texture2D>("spr_green_invader");
textures[3] = Global.content.Load<Texture2D>("yellow_invader");
Init();
}
public void Init()
{
position = new Vector2(Global.Random(100, Global.width - 100), Global.Random(0, Global.height - 300));
velocity = new Vector2(3.0f, 10.0f);
switch (Global.Random(0, 3))
{
case 0: texture = textures[0];break;
case 1: texture = textures[1];break;
case 2: texture = textures[2];break;
case 3: texture = textures[3];break;
}
}
public void Update()
{
position.X += velocity.X;
if ((position.X > Global.width - texture.Width) || (position.X < 0))
{
position.X -= velocity.X;
velocity.X = -velocity.X;
position.Y += velocity.Y;
}
}
public void Draw()
{
Global.spriteBatch.Draw(texture, position, Color.White);
}
}
}
答案 0 :(得分:0)
您的数组未初始化,无论是使用正确的大小初始化它还是使用列表:
private var textures = new List<Texture2D>();
并添加资产
textures.Add(Global.content.Load<Texture2D>("spr_red_invader"));
您仍然可以通过索引访问它们。