El Concurso Dream-Build-Play de Microsoft regresa este año para aquellos desarrolladores noveles o independientes que quieran hacer un juego para el Xbox360 y ganarse unos buenos premios de paso. Desde el 6 de abril pasado es posible registrarse en la página, con la posibilidad de recibir con el registro una cuenta de prueba por 12 meses del Creators Club (cuenta necesaria para probar los juegos en el Xbox).
Recordemos que en la edición pasada Battle Tennis, del equipo de DotSlash, quedó en 2do lugar en el concurso, llevándose un buen premio, así que no hay excusas para no participar. El trailer de Battle Tennis al finalizar el artículo.
El requisito para el juego es que debe estar hecho con XNA 3.1, versión que no está disponible sino hasta mayo, por lo que es posible comenzar el juego con la versión 3.0 y los organizadores se comprometen a enviar instrucciones para portear a la versión siguiente una vez la nueva versión esté lanzada. La noticia por esta via.
Este viernes 17 de abril comenzará la competencia de 48 horas Ludum Dare, la cual promueve la experimentación y prototipado rápido. Los desarrolladores trabajan solos alrededor de un tema en particular sometido a votación de la comunidad. Si no sabes cómo comenzar, léete este FAQ. (Via GameSetWatch)
Me di cuenta hace algunos días de que no había hecho actualizaciones de las secciones de la página en todo 2008. Así que hice la tarea de revisar los posts de ese año y actualizar la sección de Artículos, de Reseñas, y el Sobre este blog. Estoy particularmente orgulloso de la sección de Artículos: hay varios posts acerca de eventos importantes que ocurrieron en 2008 así que parte de la sección está dedicada a esos eventos. La sección de Reseñas por otra parte está bastante olvidada, y para serles sinceros, y con toda la ironía del mundo, no he tenido chance de jugar mucho. (Foto por Swami Stream).
En artículos anteriores estuvimos haciendo gráficos utilizando las primitivas de la clase Graphics que nos permite dibujar líneas, círculos, curvas, gradientes y otras figuras. Por supuesto que para tener gráficos de calidad en tu juego, vas a necesitar ilustraciones más complejas que lo que puedes hacer con ello. En este artículo aprenderás a cargar gráficos y sonidos que estén en Internet.
Debo aclarar que existe una diferencia entre cargar imágenes y sonidos e incluirlos dentro del SWF. El objetivo de este artículo es hacer un SWF que cargará imágenes y sonidos desde Internet. La alternativa es incluir estas imágenes y sonidos dentro del SWF, un proceso conocido como embed o embeber recursos. En este caso el acceso a los recursos es inmediato, aunque el tamaño del SWF va a aumentar considerablemente por contener estos archivos. (Foto por rick)
¿Qué vamos a usar?
ActionScript 3 utiliza la clase Loader para mostrar y guardar la información de un recurso gráfico (vector o imagen). En particular, Loader es un DisplayObject, como cualquier otro MovieClip, por lo que es posible cargar el recurso y agregar el objeto al Stage, con el resultado de que una vez cargada la imagen se actualizaráuna vez terminada su carga. Además, en AS3 se utiliza la clase Sound para cargar los sonidos.
En ambos casos se requiere informar a la clase del origen de estos archivos. La clase URLRequest sirve para indcar este origen, y tanto Loader como Sound aceptan este objeto para comenzar a cargar el archivo.
A continuación daremos unos ejemplos de cómo utilizar estas clases. En este artículo proveeremos una imagen (origen), un vector y un sonido (origen) de ejemplos para no perder tiempo buscandolos.
¿Cómo nos organizamos?
Los archivos que vamos a cargar deben estar en lugar accesible desde el SWF compilado. En FlashDevelop crearemos un proyecto de ActionScript 3 nuevo, en las propiedades determinaremos el tamaño de 300x300 pixeles. En el directorio bin, donde se coloca el compilado, colocaremos kitten.jpg, computer.swf y thunder.mp3.
Cargando una imagen vectorial o bitmap
Utilizar un Loader es muy sencillo. Veremos a continuación el código para cargar un vector:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var l : Loader = new Loader();
l.load(new URLRequest("computer.swf"));
this.addChild(l);
}
}
}
Si compilamos y ejecutamos la película obtendremos este resultado:
El código para cargar una imagen es exactamente igual, cambiando la dirección del URLRequest:
[...]
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var l : Loader = new Loader();
l.load(new URLRequest("kitten.jpg"));
this.addChild(l);
}
[...]
Loader puede cargar JPG, PNG y GIF. En el caso de que se cargue un GIF animado, sólo mostrará el primer fotografa del GIF. Si queremos mostrar un GIF animado, tendremos que usar una librería externa: AS3 GIF Player. Es muy sencillo utilizarlo, pero si ustedes lo piden, podemos repasarlo en un próximo artículo. La película resultante se verá como en la imagen a continuación.
En ambos casos, el Loader carga la película o la imagen y considera el punto (0, 0) como la esquina superior izquierda. Esto es importante saberlo ya que es el punto de origen lo que se toma en cuenta para hacer las transformaciones (translación, escalamiento y rotación).
Cargando un sonido
Ahora cargaremos un sonido. Utilizaremos el siguiente código:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var s : Sound = new Sound(new URLRequest("thunder.mp3"));
s.play();
}
}
}
Al compilar y ejecutar, la película estará en blanco pero escucharemos el sonido de un trueno.
Y ahora…
Dejamos por acá el archivo comprimido con todo el proyecto (ZIP, 256Kb) para referencia. Ya sabemos cargar estos recursos desde Internet. Quedaría cargar un tipo de archivo de tipo texto para datos de juegos, pero me gustaría dar un ejemplo concreto y hacer un paseo por los distintos tipos de organización de los datos.
Si hacemos un juego que requiere cargar un montón de recursos, es muy probable que muchos de esos dibujos e imágenes no se vean sino hasta que terminen de cargarse. Una solución sería cargar todos los archivos antes de seguir adelante con el juego. Prequel es una librería que permite hacer esto con mucha facilidad. Otra solución sería incluir los recursos dentro de la película. Este será el tema del próximo artículo. Hasta entonces.