#c# #xna
#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 amp;amp; !Game1.abDisparo amp;amp; !Game1.derDisparo amp;amp; !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 amp;amp; !Game1.abDisparo amp;amp; !Game1.derDisparo amp;amp; !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 amp;amp; !Game1.abDisparo amp;amp; !Game1.derDisparo amp;amp; !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 amp;amp; !Game1.abDisparo amp;amp; !Game1.derDisparo amp;amp; !Game1.izqDisparo)
{
marcoMin = 12;
marcoMax = 15;
}
posPersonajePrincipalY = 10;
}
if (!Game1.abPersonaje amp;amp; !Game1.arPersonaje amp;amp; !Game1.derPersonaje amp;amp; !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--;
}
}
}
}
Ошибка в текстуре внутри метода Draw класса Bullet (там говорится, что оно равно null). Я пытался решить это в течение 5 дней, и я все еще не мог найти решение. И я знаю, что это не так сложно, но я новичок в программировании и XNA (я начал это делать в марте).
Комментарии:
1. Вам нужно загрузить текстуру в
ClasePersonaje.bulletTexture
. Как бы то ни было, ни одна текстура никогда не загружается и, следовательно, не передается вBullet
класс.2. public void LoadContent(ContentManager Content) { bulletTexture = Content.Load<Texture2D>(«playerbullet»); // Нет, это все еще не работает }