Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tacno

[Resolvido] Problema ao inserir imagem pelo xna do c#

Recommended Posts

Olá!

 

estou começando a estudar xna e já me deparei com um problema do qual não consigo resolver.

 

estou seguindo um tutorial e tive o seguinte problema.

 

após criar o projeto do xna, defini uma variável personagem do tipo Texture2D

 

depois fiz o seguinte script

 

protected override void LoadContent()
       {
           personagem = this.Content.Load<Texture2D>(@"Imagens\charFrente");

           // Create a new SpriteBatch, which can be used to draw textures.
           spriteBatch = new SpriteBatch(this.GraphicsDevice);

           spriteBatch.Begin();
           spriteBatch.Draw(personagem, new Vector2(10, 10), Color.White);
           spriteBatch.End();

           // TODO: use this.Content to load your game content here
       }

 

Não da erro nenhum, criei o personagem a partir da imagem charFrente, criei o spriteBatch pra buscar a placa de vídeos

mas quando mandei desenhar ele simplesmente não desenha.

e não da nenhum erro de compilação. Ele está realmente achando a imagem, pois mudei o nome e vi q gera erro.

 

Alguem sabe como q eu posso fazer pra essa imagem aparecer na tela??

desde já agradeço!

um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!

 

O método LoadContent serve apenas para carregar imagens, sons, etc.

Para desenhar você usa o método Draw.

Ficaria assim:

 

protected override void Initialize()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(this.GraphicsDevice);
}

protected override void LoadContent()
{
    personagem = this.Content.Load<Texture2D>(@"Imagens\charFrente");
}

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.Black);

    spriteBatch.Begin();
    spriteBatch.Draw(personagem, new Vector2(10, 10), Color.White);
    spriteBatch.End();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui!! =DD

 

Muito obrigado!

 

Só mais uma pergunta!!

meu personagem já está andando pelo cenário, só q ele está passando por cima de tudo, casas arvores e etc.

 

Eu sei e já até consegui fazer ele não passar por uma determinada área por ifs ( if(personagem.X < 300) { blabla } )

 

só q pra um cenário pequeno como o q eu estou fazendo já vi que vai precisar de MUUUUUUITOS ifs!! muitos mesmos

o q fica completamente inviável continuar o jogo

 

gostaria de saber se tem como fazer de um jeito mais facil, tipo determinar áreas passando de um ponto até um ponto e depois impedi-lo que passe por essa determinada área.

 

caso a resposta seja não, então pra jogos tipo o zelda de super nintendo os programadores usaram milhares e milhares de ifs pra não passarem por determinadas áreas??

 

desde já agradeço pelo ajuda gente!! =DD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para isso o que você pode fazer seria criar uma classe base 'Sprite', por exemplo.

Nela você criaria uma propriedade pública do tipo Rectangle e definiria as medida, não esquecendo de mudar o valor de X e Y caso o objeto se mova.

E no método Update(GameTime gameTime) você verificaria se houve colisão.

Ficaria mais ou menos assim:

 

public abstract class Sprite
{
   protected Vector2 Position;

   protected Rectangle collisionBox;
   public Rectangle Box
   {
       get
       {
           // posições do objeto na fase.
           collisionBox.X += (int)Position.X;
           collisionBox.Y += (int)Position.Y;

           return collisionBox;
       }
   }
}

// As classes.
public class Link : Sprite
{
   public override void LoadContent(ContentManager content)
   {
       texture = content.Load<Texture2D>("link");

       collisionBox = new Rectangle(Position.X, Position.Y, texture.Width, texture.Height);
   }
}
public class Casa : Sprite
{
   public override void LoadContent(ContentManager content)
   {
       texture = content.Load<Texture2D>("casa");

       collisionBox = new Rectangle(Position.X, Position.Y, texture.Width, texture.Height);
   }
}

// No Update do seu jogo.
protected override void Update(GameTime gameTime)
{
   // colidiu com casa?
   if (Link.Box.Intersects(Casa.Box))
   {
       // volta o movimento/não se move dependendo de como você fizer.
   }
}

 

Você poderia usar List<Casa> com foreach ou for se você usar muitas casas.

Mas a idéia seria essa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.