我的texture2D引用数组从未分配给我,我该怎么办?

时间:2018-02-10 14:51:17

标签: c# nullreferenceexception

我正在为一个学校项目制作这个游戏,你可以在屏幕上显示不同类型的入侵者。

我的想法是创建一个带有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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的数组未初始化,无论是使用正确的大小初始化它还是使用列表:

private var textures = new List<Texture2D>();

并添加资产

textures.Add(Global.content.Load<Texture2D>("spr_red_invader"));

您仍然可以通过索引访问它们。