Tacno 2 Denunciar post Postado Abril 13, 2012 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
Caio.Lib 0 Denunciar post Postado Abril 13, 2012 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
Tacno 2 Denunciar post Postado Abril 13, 2012 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
Caio.Lib 0 Denunciar post Postado Abril 14, 2012 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