Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou trabalhando com MonoGame, e estou com um problema que não consigo identificar. Tenho uma classe de animação, nela tenho uma Lista que recebe qualquer tipo de ator (por agora um ator pode ser um Sprite ou objeto de movimento que informa o deslocamento).
/// <summary>Classe para animação de objetos do jogo.</summary>
public class AnimationScript : DrawableGameComponent
{
List<Actor> itens = new List<Actor>();
Na minha classe de personagem, edito essa lista:
public class Ryu : Character
{
public Ryu(Game game) : base(game)
{
}
protected override void LoadContent()
{
List<Actor> actors = new List<Actor>();
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait1.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait2.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait3.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait4.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait5.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/wait6.png"), 150)));
EditSkill("Wait", ref actors);
actors.Add(new Actor(new Movement(5,0)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk1.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk2.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk3.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk4.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk5.png"), 150)));
actors.Add(new Actor(new Sprite(Game.Content.Load<Texture2D>("ryu/walk6.png"), 150)));
EditSkill("Forward", actors);
}
Quando é hora de desenhar o personagem, eu verifico se o item da lista é uma sprite, se for, será rendenrizado e adiciona o mesmo valor a uma variável chamada lastSpriteRendered (ela é inicializada como "null" no construtor). Ela irá ser desenhada quando o item for um movimento, sendo assim, irá repetir a última sprite.
public override void Draw(GameTime gameTime)
{
if (!checkList())
return;
sb = (SpriteBatch)base.Game.Services.GetService(typeof(SpriteBatch));
if (itens[index].ActorType == ActorType.Sprite)
{
sb.Draw(itens[index].Sprite.Texture, position, Color.White);
lastSpriteRendered = itens[index].Sprite.Texture;
}
else
{
sb.Draw(lastSpriteRendered, position, Color.White);
}
base.Draw(gameTime);
}
Eu verifiquei a variável no bloco if, e ela recebe o valor, mas quando é necessário entrar no bloco else, ela se encontra novamente nula. Não estou entendendo.
Carregando comentários...