我需要在XNA,C#中创建项目符号但是Bullets类中的错误告诉我“纹理”没有值

时间:2016-10-22 03:50:32

标签: c# xna

public class Bullet
    {
        public Rectangle boundingBox;
        public Texture2D texture;
        public Vector2 origin;
        public Vector2 position;
        public bool isVisible;
        public float speed;

        public Bullet (Texture2D newTexture)
        {
            speed = 10;
            texture = newTexture;
            isVisible = false;
        }
        public void Draw(SpriteBatch spritebatch)
        {
            spritebatch.Draw(texture, position, Color.White);
        }
    }

public class ClasePersonaje : Microsoft.Xna.Framework.Game
    {
        public Texture2D PersonajePrincipalClase { get; set; }
        public int Filas { get; set; }
        public int Columnas { get; set; }
        public int marcoMax { get; set; }
        public int marcoMin { get; set; }
        public int marcoActual { get; set; }
        private int marcosTotales;
        private double contadorFrames;
        public static int posPersonajePrincipalX = 30;
        public static int posPersonajePrincipalY = 30;

        public Texture2D bulletTexture;
        public float bulletDelay;
        public List<Bullet> bulletList;

        public ClasePersonaje(Texture2D texturaPersonajePrincipal, int filas, int columnas)
        {
            PersonajePrincipalClase = texturaPersonajePrincipal;
            Filas = filas;
            Columnas = columnas;
            marcoActual = marcoMin;
            marcosTotales = filas * columnas;

            bulletList = new List<Bullet>();
            bulletDelay = 20;
        }
        public void Draw(SpriteBatch spriteBatch, Vector2 location, float size)
        {
            int ancho = PersonajePrincipalClase.Width / Columnas;
            int altura = PersonajePrincipalClase.Height / Filas;
            int fila = (int)((float)marcoActual / (float)Columnas);
            int columna = marcoActual % Columnas;

            Rectangle rectanguloOrigen = new Rectangle(ancho * columna, altura * fila, ancho, altura);
            Rectangle rectanguloDestino = new Rectangle((int)location.X, (int)location.Y, (int)(ancho * size), (int)(altura * size));

            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null);
            spriteBatch.Draw(PersonajePrincipalClase, rectanguloDestino, rectanguloOrigen, Color.White);
            spriteBatch.End();

            foreach (Bullet b in bulletList)
            {
                b.Draw(spriteBatch);
            }
        }
        public void Update()
        {
            if (Game1.disparo)
            {
                Shoot();
            }
            UpdateBullets();
            if (contadorFrames >= 100)
            {
                if (marcoActual < marcoMin || marcoMax <= marcoActual)
                {
                    marcoActual = marcoMin;
                }
                else
                {
                    marcoActual++;
                }
                if (Game1.derPersonaje)
                {
                    if (Game1.derDisparo)
                    {
                        marcoMin = 0;
                        marcoMax = 3;
                    }
                    else if (Game1.izqDisparo)
                    {
                        marcoMin = 4;
                        marcoMax = 7;
                    }
                    else if (Game1.arDisparo)
                    {
                        marcoMin = 8;
                        marcoMax = 11;
                    }
                    else if (Game1.abDisparo)
                    {
                        marcoMin = 12;
                        marcoMax = 15;
                    }
                    if (!Game1.arDisparo && !Game1.abDisparo && !Game1.derDisparo && !Game1.izqDisparo)
                    {
                        marcoMin = 0;
                        marcoMax = 3;
                    }
                    posPersonajePrincipalX += 10;
                }
                else if (Game1.izqPersonaje)
                {
                    if (Game1.derDisparo)
                    {
                        marcoMin = 0;
                        marcoMax = 3;
                    }
                    else if (Game1.izqDisparo)
                    {
                        marcoMin = 4;
                        marcoMax = 7;
                    }
                    else if (Game1.arDisparo)
                    {
                        marcoMin = 8;
                        marcoMax = 11;
                    }
                    else if (Game1.abDisparo)
                    {
                        marcoMin = 12;
                        marcoMax = 15;
                    }
                    if (!Game1.arDisparo && !Game1.abDisparo && !Game1.derDisparo && !Game1.izqDisparo)
                    {
                        marcoMin = 4;
                        marcoMax = 7;
                    }
                    posPersonajePrincipalX -= 10;
                }
                else if (Game1.arPersonaje)
                {
                    if (Game1.derDisparo)
                    {
                        marcoMin = 0;
                        marcoMax = 3;
                    }
                    else if (Game1.izqDisparo)
                    {
                        marcoMin = 4;
                        marcoMax = 7;
                    }
                    else if (Game1.arDisparo)
                    {
                        marcoMin = 8;
                        marcoMax = 11;
                    }
                    else if (Game1.abDisparo)
                    {
                        marcoMin = 12;
                        marcoMax = 15;
                    }
                    if (!Game1.arDisparo && !Game1.abDisparo && !Game1.derDisparo && !Game1.izqDisparo)
                    {
                        marcoMin = 8;
                        marcoMax = 11;
                    }
                    posPersonajePrincipalY -= 10;
                }
                else if (Game1.abPersonaje)
                {
                    if (Game1.derDisparo)
                    {
                        marcoMin = 0;
                        marcoMax = 3;
                    }
                    else if (Game1.izqDisparo)
                    {
                        marcoMin = 4;
                        marcoMax = 7;
                    }
                    else if (Game1.arDisparo)
                    {
                        marcoMin = 8;
                        marcoMax = 11;
                    }
                    else if (Game1.abDisparo)
                    {
                        marcoMin = 12;
                        marcoMax = 15;
                    }
                    if (!Game1.arDisparo && !Game1.abDisparo && !Game1.derDisparo && !Game1.izqDisparo)
                    {
                        marcoMin = 12;
                        marcoMax = 15;
                    }
                    posPersonajePrincipalY += 10;
                }
                if (!Game1.abPersonaje && !Game1.arPersonaje && !Game1.derPersonaje && !Game1.izqPersonaje)
                {
                    marcoActual = 12;
                } 
                contadorFrames = 0;
            }
            else
            {
                contadorFrames += Game1.ElapsedTime;
            }
        }
        public void Shoot()
        {
            if (bulletDelay >= 0)
            {
                bulletDelay--;
            }
            if (bulletDelay <= 0)
            {
                Bullet b = new Bullet(bulletTexture);
                b.position = new Vector2(posPersonajePrincipalX, posPersonajePrincipalY);
                b.isVisible = true;
                if (bulletList.Count() < 20)
                {
                    bulletList.Add(b);
                }
            }
            if (bulletDelay == 0)
            {
                bulletDelay = 20;
            }
        }
        public void UpdateBullets()
        {
            foreach (Bullet b in bulletList)
            {
                b.position.Y -= 10;
                if(b.position.Y <= 0)
                {
                    b.isVisible = false;
                }
            }
            for (int i = 0; i < bulletList.Count(); i++)
            {
                if(!bulletList[i].isVisible)
                {
                    bulletList.RemoveAt(i);
                    i--;
                }
            }
        }
    }

错误发生在Bullet类的Draw Method中的纹理中(它表示它为null)。我一直试图解决这个问题5天,但我仍然找不到解决方案。而且我知道这并不困难,但我是编程和XNA的新手(我在3月开始)

0 个答案:

没有答案