Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Darkgold

#1
Welcome!, y a leer mucho como yo  :D
#2
XNA / Re: Ayuda, Camara 2D Xna
19 de Agosto de 2011, 07:20:49 PM
Oks, muchas gracias a los dos entre sus comentarios mas un poco mas de toqueteo ya he comprendido x fin como funciona.

Saludos!
#3
XNA / Re: Ayuda, Camara 2D Xna
19 de Agosto de 2011, 10:38:55 AM
Citar2) Luego se usa la camara en SpriteBatch, para transformar la posicion del sprite a coordenadas de pantalla

¿Entonces lo que se consigue metiendole la "camara" (matriz) al begin() es que dibuje los objetos en pantalla en la posicion obtenida mediante la multiplicacion:  (posicion del sprite) * (matriz)?
#4
XNA / Ayuda, Camara 2D Xna
19 de Agosto de 2011, 12:10:45 AM
Hola, me presento, llevo bastante tiempo leyendo vuestro foro y recomendandolo pero unca me habia dado por registrarme y participar dado que no considero que tenga los suficientes conocimientos para ello.
No soy de escribir post pero sta vez necesito su ayuda / sabiduria  :), he buscado en google y por todos lados pero no consigo comprender el problema que me ataña.

Estoy aprendiendo xna y quiero crear una camara 2D que para que se vaya viendo el juego conforme avanzas, decirles que ya he probado otras alternativas como la de mover el fondo y que de la sensacion de avance, pero quiero aprender todas las posibles y esta es otra de ellas.

He aqui el codigo que intento entender:

Código (csharp) [Seleccionar]
namespace camara_y_colision
{
 
   public class Game1 : Microsoft.Xna.Framework.Game
   {
       Texture2D animacion;
       Texture2D fondo;
       Matrix camara;
       int posCamX;
       int posCamY;
       Vector2 posicionSPRITE;


       GraphicsDeviceManager graphics;
       SpriteBatch spriteBatch;

       public Game1()
       {
           graphics = new GraphicsDeviceManager(this);
           Content.RootDirectory = "Content";
       }

     
       protected override void Initialize()
       {
           posicionSPRITE = new Vector2(400, 500);
           posCamX = 400;
           posCamY = 500;
           //BUFFER DE LA PANTALLA
           graphics.PreferredBackBufferWidth = 800;
           graphics.PreferredBackBufferHeight = 600;
           base.Initialize();
       }

       protected override void LoadContent()
       {
           spriteBatch = new SpriteBatch(GraphicsDevice);
           animacion= Content.Load<Texture2D>("img/animacion");
           fondo = Content.Load<Texture2D>("img/fondo1");
       }

       protected override void UnloadContent()
       {
         
       }

       protected override void Update(GameTime gameTime)
       {
       
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();

           if (Keyboard.GetState().IsKeyDown(Keys.Left))
           {
               if (posicionSPRITE.X >= 0)
                   posicionSPRITE.X -= 5;
               if ((posicionSPRITE.X >= 400) && (posicionSPRITE.X <= 800))
                   posCamX -= 5;
           }
           if (Keyboard.GetState().IsKeyDown(Keys.Right))
           {
               if (posicionSPRITE.X <= 1200 - seta.Height)
                   posicionSPRITE.X += 5;
               if ((posicionSPRITE.X <= 800) && (posicionSPRITE.X >= 400))
                   posCamX += 5;
           }
           if (Keyboard.GetState().IsKeyDown(Keys.Up))
           {
               if (posicionSPRITE.Y >= 0)
                   posicionSPRITE.Y -= 5;
               if ((posicionSPRITE.Y >= 300) && (posicionSPRITE.Y <= 500))
                   posCamY -= 5;
           }
           if (Keyboard.GetState().IsKeyDown(Keys.Down))
           {
               if (posicionSPRITE.Y < 800 - animacion.Height)
                   posicionSPRITE.Y += 5;
               if ((posicionSPRITE.Y <= 500) && (posicionSPRITE.Y >= 300))
                   posCamY += 5;
           }

         
           camara = Matrix.CreateTranslation(new Vector3(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2, 0)) * Matrix.CreateTranslation(new Vector3(-posCamX, -posCamY, 0));


           base.Update(gameTime);
       }

       protected override void Draw(GameTime gameTime)
       {
           GraphicsDevice.Clear(Color.CornflowerBlue);
           spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate,SaveStateMode.SaveState, camara);
           spriteBatch.Draw(fondo, Vector2.Zero, Color.White);
           spriteBatch.Draw(animacion, posicionSPRITE, Color.White);
           spriteBatch.End();

           base.Draw(gameTime);
       }
   }
}


No consigo entender como se hace funcionar la camara con este codigo por mucho que toquetee y busque, ¿en que parte del codigo entra en juego la aparicion de la camara y su modificacion?

CitarspriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate,SaveStateMode.SaveState, camara);

1-    Supongo que en esa parte de codigo esta la clave para entender como se dibuja, como dibuja o como funciona la camara XD, pero no lo consigo      entender, he mirado la api de ms y tmp me aclara.

2-La "idea" que tengo es que al pulsar una tecla actualizamos la posicion de la camara, vale... pero ¿para que, si despues en Draw no dibujamos ninguna camara.?,.

Gracias de antemano, y Saludos!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.