lunes, 25 de junio de 2012

Tutorial XNA(Transición): Logo que aparece y se desvanece(Fade in Fade Out Screen)

Hola, este es mi segundo post, en este post les enseñare como crear un pantalla de entrada que aparece lentamente y luego se desvanece a negro o al color que quieran.

Primero definimos 3 variables antes de la funcion Game1():

 Texture2D AscendancyLogo;  
 Rectangle AscendancyLogoRec;  
 Int32 BGT = 0;  
Una es una textura la llamare AscendancyLogo, la segunda un rectangulo llamado AscendancyLogoRec y un entero llamado BGT.

Luego cargamos la información de la textura y del rectangulo dentro de la funcion LoadContent():

 AscendancyLogo = Content.Load<Texture2D>("Ascendancy Games");  
 AscendancyLogoRec = new Rectangle(0, 0, Window.ClientBounds.Width, Window.ClientBounds.Height);  

Cargamos la imagen del logo de entrada, mi imagen se llama "Ascendancy Games", luego creamos un nuevo objeto del rectangulo ya creado, los argumentos son los siguientes: "0,0,Window.ClientBounds.Width,Window.ClientBounds.Height". El primero 0(cero) es la pocision X del rectangulo, el segundo 0 la pocision Y del rectangulo, el tercer argumentos "Window.ClientBounds.Width" es el ancho total del juego, esto adaptara la imagen a el ancho de la pantalla, lo mismo con Window.ClientBounds.Height para el alto.

Ahora pasamos a la función Draw():

 if (gameTime.TotalGameTime.Seconds < 3)  
         {  
           spriteBatch.Begin();  
           spriteBatch.Draw(AscendancyLogo, AscendancyLogoRec, new Color(BGT = BGT + 1, BGT = BGT + 1, BGT = BGT + 1));  
           spriteBatch.End();  
         }  
         else  
         {  
           spriteBatch.Begin();  
           spriteBatch.Draw(AscendancyLogo, AscendancyLogoRec, new Color(BGT = BGT - 1, BGT = BGT - 1, BGT = BGT - 1));  
           spriteBatch.End();  
         }  

donde utilizamos los segundos transcurridos en el juego para ir cambiando la transparencia de la imagen, como ven dentro del primer condicional if creamos un nuevo color para la imagen, al crear un nuevo color se introducen 3 argumentos, cada argumento yo lo introduje así: "BGT = BGT + 1" esto quiere decir que cada vez que se ejecute el bucle se ira sumando de a 1 el valor del cada color RGB, como pueden ver en el argumento de la condición dice if (gameTime.TotalGameTime.Seconds < 3) ese ultimo tres indica el segundo cuando se va a cortar la primera transicion(Fade in). Luego en else se hace el mismo proceso pero a la inversa, "BGT = BGT - 1" reducion del valor de los colores RBG hasta 0, que es cuando la imagen queda totalmente desaparecida, esto configurado como lo muestro aquí lleva aproximadamente 6 segundos.

Bueno eso fue todo, esta fue la manera mas simple de encarar este problema que se me ocurrió ya que vi en muchos foros que plantean otras alternativas que conllevan a escribir demaciado codigo.

Espero que les haya servido y no olviden comentar.

Un saludo.

Shogun.

No hay comentarios:

Publicar un comentario