Puedes descargar la aplicación acabada y las imagenes aquí.
Creando un juego para iPhone con GameSalad
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Instalando GameSalad.
- 4. Creando nuestro juego en GameSalad.
- 4.1 Elementos de un juego en GameSalad.
- 4.2 Creando el juego.
- 5. Conclusiones.
1. Introducción.
En este tutorial vamos a aprender a crear un juego usando una plataforma para desarrollar videojuegos llamada GameSalad. La característica principal de GameSalad es que no hace falta introducir ni una sola linea de código para desarrollar el videojuego. La aplicación funciona básicamente arrastrando objetos de un lado a otro de la pantalla. Por lo tanto no es necesario conocer un lenguaje de programación para diseñar un videojuego. GameSalad nos permite desarrollar juegos para iPhone, iPad y para navegadores web.
Por otro lado, GameSalad todavía esta en versión beta, por lo que de vez en cuando podemos tener algún mal funcionamiento de la aplicación (cierres inesperados o lentitud entre el cambio de un elemento a otro). Mientras hice el tutorial se cerró la aplicación tres veces y cuando estaba acabandolo, empezó a ir bastante lento (a veces se solucionaba abriendo y cerrando GameSalad). También es algo complicado debuggear la aplicacíon, ya que no disponemos de herramientas apropiadas para hacerlo, hay que hacerlo mediante cajas de texto, lo que no resulta muy cómodo.
El videojuego que vamos a crear es el mismo que hicimos en el tutorial de cocos2d, una versión del space invaders. Y vamos a hacerlo para un iPhone en la posición de landscape. En el tutorial no trataremos como distribuir el juego a través del servicio que también proporciona GameSalad.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: MacBookPro8,2 (2 GHz Intel Core i7, 4GB DDR3 SDRAM).
- AMD Radeon HD 6490M 256MB.
- Sistema Operativo: Mac OS X Snow Leopard 10.6.7.
- GameSalad Creator Version 0.9.2 beta
3. Instalando GameSalad.
La instalación de GameSalad es muy sencilla, simplemente nos bajamos el instalador de su página web http://gamesalad.com/download/latestCreator. Hacemos doble click sobre el archivo que nos acabamos de bajar y lo arrastramos a aplicaciones. Ya tenemos instalado GameSalad.
4. Creando nuestro juego en GameSalad
4.1 Elementos de un juego en GameSalad.
Vamos a explicar un poco el funcionamiento básico. En GameSalad hay cinco componentes principales: el juego (Game), la escena (Scene), los actores (Actor), las reglas (Rules) y los comportamientos (Behaviors). Vamos a explicar un poco cada uno de ellos.
El juego, esta compuesto por escenas y tiene atributos. Además en el juego se definen los actores que luego podrán usarse en cada una de las escenas que componen el juego.
Las escenas, son donde se desarrolla la acción del juego, podemos pensar en una escena como en un nivel de un juego. En cada escena definiremos a unos actores que realizarán ciertos comportamientos cuando se cumplan ciertas reglas.
Los actores, son personajes del juego, o elementos dentro del mismo (paredes o efectos del juego). Tienen sus propios atributos y se pueden definir reglas y comportamientos sobre ellos.
Las reglas son las condiciones que se tienen que cumplir para que un actor realice cierto comportamiento.
Por último los comportamientos son las cosas que pueden hacer los actores, básicamente se dividen en dos, acciones o cambios en los atributos. En GameSalad tenemos unos comportamientos por defecto y además podemos definir comportamientos nosotros mismos.
Quizás quede más claro en la práctica, vamos a empezar a crear nuestro juego.
4.2 Creando el juego.
Abrimos GameSalad, en la barra de la izquierda pinchamos en New y hacemos doble click en My Great Project.
En la ventana que se abre podemos configurar características del juego, podremos volver a esta pantalla siempre que queramos pulsando el icono Home que hay arriba a la izquierda.
Hacemos doble click sobre la escena que se crea por defecto (Initial Scene). Esta escena va a ser en la que se desarrollé el juego. Vamos a crear cuatro actores, para añadir un actor sólo tenemos que presionar el simbolo + que hay en el centro a la izquierda de la pantalla.
Para editar un actor, hacemos doble click sobre él. Aqui podemos ver los atributos del actor, vamos a cambiarle el nombre a Mosca, hacemos doble click sobre el nombre actual (Actor 1) y lo cambiamos a Mosca, editamos el tamaño del actor dandole a Size y le cambiamos el ancho y el alto a 21. También le vamos a añadir una imagen. Debajo de la lista de los atributos hay otra sección en la que tenemos tres pestañas, behaviors (comportamientos), images (imagenes) y audio (sonidos). Abrimos la pestaña de images y le damos al símbolo + de la esquina inferior izquierda para añadir las imagenes. Buscamos la carpeta donde tenemos las imagenes guardadas y las añadimos. Para asociar la imagen con el actor simplemente arrastramos la imagen encima del actor.
Hacemos los mismo para los otros tres actores. Si se arrastra la imagen directamente encima del actor se lo cambia por el tamaño al que tiene la imagen. Sólo habria que arrastrar las imagenes y cambiarles el nombre.
Vamos a poner a los actores en escena. Añadimos el fondo, arrastramos sobre el actor Fondo y lo ponemos en la escena. La escena tiene el tamaño de la pantalla del iPhone, como la imagen es más grande podemos ajustarla pinchando sobre ella.
Vamos a hacer que la mosca se pueda mover. Lo vamos a hacer mediante un par de reglas. Para crear una regla le damos al boton de la parte superior derecha que pone Create Rule. Le editamos el nombre haciendo doble click sobre Rule, y le ponemos Mover Derecha. Vamos a usar el acelerometro para mover a la mosca, y para probar la aplicación en el ordenador vamos añadir que se pueda mover con las flechas de dirección. En la condición que se ha creado por defecto seleccionamos attribute, le damos a los tres puntos que hay a la derecha y nos sale una ventana en la que podemos elegir el atributo a cambiar, elegimos Devices > Accelerometer > X y le decimos que cuando sea > que 0,1. Añadimos otra condición dandole al simbolo +. Y seleccionamos Actor receives event, en el siguiente desplegable key, pinchamos donde pone keyboard y pinchamos la flecha derecha (right) y le decimos cuando se pulse (down). Tambien hay que cambiar donde pone When All conditions are valid:, el All por Any, para que cuando se cumpla cualquiera de las dos, la mosca se mueva.
Una vez que tenemos las condiciones, hay que añadir lo que queremos que se haga cuando se cumplan, para ello en la pestaña behaviors de abajo a la izquierda vamos a elegir el que se llama Move y lo arrastramos a nuestra regla. En este caso no hace falta cambiar nada, porque ya esta para que se mueva hacia la derecha.
Para crear la regla de movimiento a la izquierda vamos a copiar la que tenemos hacia la derecha. Pinchando en ese regla y presionando alt podemos arrastrarla abajo para copiarla (tambien funciona cmd + c para copiar y cmd + v para pegar). Le cambiamos el nombre, la tecla derecha por la izquierda, el valor del acelerometro para que sea menor que -0,1 y la direccion de 0 a 180, para que se mueva a la izquierda.
Para probar que todo funciona como debería, volvemos a la escena y añadimos a la mosca en la parte de abajo de la pantalla. Para probar la aplicación le damos al boton de preview que hay en la parte superior y usamos las flechas para mover la mosca.
Editemos ahora el actor Disparo. Le añadimos el comportamiento Change Velocity, y en la dirección le ponemos 90, para que vaya hacia arriba.
Editamos otra vez a la mosca, para crear la regla para disparar. Creamos la regla, en las condiciones ponemos cuando se toque fuera de la mosca o cuando se pulse el raton (para probarlo). Y añadimos el comportamiento Spawn Actor (crear actor), sólo habría que cambiar el Actor y ponerlo a Disparo.
Para gestionar las naves, vamos a añadir un par de atributos al juego, para añadirlos, seleccionamos la pestaña attributes y le damos al +. Elegimos el tipo, los dos van a ser de tipo integer. Y se llamarán NumeroNaves y DireccionMovimiento. El atributo DireccionMovimiento lo vamos a usar para mover las naves, tendrá tres valores: -1, 0 y 1. Cuando valga 0 se moverá hacia abajo y cuando valga -1 y 1 se moverá lateralmente. Vamos a poner el valor en -1 para probarlo y añadimos la regla para el movimiento a la nave. Le decimos que cuando el atributo DireccionMovimiento valga 0, se mueva hacia abajo a velocidad 30 y -15, y en el otherwise (cuando no se cumpla la condición anterior) ponemos el movimiento lateral. que se mueva en direccion 0 a la velocidad del atributo DireccionMovimiento por 90. Añadimos una nave en la parte superior derecha de la escena y lo probamos.
Ahora para que las naves cambien de dirección, vamos a crear dos muros, que no se verán pero estaran ahí, y cuando una nave choque con el muro, se cambiará la variable DireccionMovimiento, pasando primero por 0 para que bajen hacia abajo, y luego por el valor contrario al que tenia. Creamos un actor Muro. Vamos a cambiarle el factor de restitución al muro a 0 (para que no reboten los objetos al chocar con él). Al que le vamos a poner una regla, para que cuando el muro colisione (overlaps or collides) con una nave se cambie el atributo del juego DireccionMovimiento a 0 y poner un Timer para que pasados 0.8 segundos se cambie a 1 (luego editaremos el muro de la derecha para que se cambie a -1).
Ahora colocamos dos muros, uno a cada lado de la pantalla y con el raton les damos el tamaño adecuado (el alto de la pantalla).
Hacemos doble click sobre el muro de la derecha y nos sale un candado, para avisarnos que lo que vamos a cambiar son los atributos de ese muro en particular, no del actor Muro. Hacemos click en el candado. y cambiamos en el change attribute del timer el 1 por -1, tambien le cambiamos el nombre a muroDerecho para identificarlo mejor.
Para gestionar las colisiones entre el disparo y la nave y añadimos la regla par que cuando colisione con un Disparo se destruya (Destroy). Se lo añadimos al disparo tambien aprovechando para decir que si sale de la pantalla tambien se destruya. Añadimos tambien más naves a la escena (esto creo que hay que hacerlo de una en una).
Tenemos que hacer que se sumen las naves al TotalNaves, para ello al actor nave le añadimos el behavior change attribute NumeroNaves a NumeroNaves+1. Tambien le añadimos a la regla que teniamos para que se destruyesen las naves que le reste uno a ese mismo atributo.
Mientras probaba la aplicación, me he dado cuenta que la mosca puede moverse fuera de los limites de la pantalla. Para arreglarlo, vamos a añadir un comportamiento collide a la mosca, en el tipo de actor le decimos Muro. Si lo probais ahora mismo tiene su gracia, porque la mosca derriba los muros al chocarse con ellos. Para que eso no pase, en el actor Muro cambiamos el desmarcamos el atributo Movable que esta dentro del apartado physics. Para que la mosca no rebote le cambiamos el factor de restitución a 0, aprovechamos para cambiarselo tambien a la nave (esta tambien dentro del apartado physics y se llama Restitution).
Ahora mismo la aplicación tiene la misma funcionalidad que la que hicimos con cocos2d, le faltarían las condiciones para acabar la partida. Como aquí es bastante sencillo crear escenas nuevas y para enseñaros un poco como hacer la transición entre escenas vamos a crear tres nuevas escenas: una pantalla principal, el mensaje de victoria y el mensaje de derrota.
Pulsamos el boton de Home y abajo a la izquierda tenemos el + para añadir escenas, añadimos tres. Les cambiamos el nombre (Menu Principal, Ganar y Perder) y como el orden que tienen las escenas es importante (por lo menos la que esta la primera que será la que se ejecute al lanzar la aplicación) ponemos la de Menu Principal la primera (haciendo click y arrastrando). Si quereís ponerle el mismo fondo a las escenas que el que tiene la de jugar, hacedlo antes de añadir el resto de actores, porque si no se taparán al poner el fondo después. Aprovechamos para cambiarle el nombre a la Initial Scene por Juego para que sea más significativo.
Volvamos a nuestra escena de juego para realizar las transiciones. Le añadimos una regla a la mosca, para que cuando colisione con una nave pasemos a la escena de perder. Para ir a la escena de ganar tenemos que comprobar que la variable del juego NumeroNaves vale 0, pero no podemos hacerlo directamente con una regla porque nada más empezar la escena vale 0, por lo que tenemos que poner la regla dentro de un timer.
Vamos a editar la escena de Ganar, creamos un actor que se llame texto al que le vamos a poner un comportamiento que sea mostrar texto (display text). Arrastramos ese actor hasta nuestra escena y editamos la instancia del actor (hacemos doble click sobre él y le damos al candado para poder editarlo). Al texto le ponemos «¡Has ganado!» y cambiamos el atributo Alpha (dentro de color) a 0, para que sea transparente. Ahora parecerá que ha desparecido de la escena. Podemos seleccionarlo fácilmente si en la ventanada del Inspector (en la que estan los actores), elegimos Scene y vemos los atributos (Attributes), aqui nos salen los actores que hay dentro de la escena, vemos que esta nuestro actor texto, para seleccionarlo, podemos seleccionar ahí.
Hacemos lo mismo para la escena Perder poniendole como texto «¡Has perdido!».
Vamos a modificar ahora el menu principal para que tenga tres textos (una para jugar, otro para las preferencias y otro para las instrucciones, estos dos ultimos no harán nada más que rellenar el espacio en la pantalla. Añadimos a la escena del menu principal los tres Textos. Le añadimos una regla al de jugar, para que cuando se toque dentro del actor nos mande a la escena Jugar.
Para acabar vamos a poner un timer a las escenas de ganar y perder para que despues de mostrar el mensaje nos redirijan al menu principal.
Me hubiese gustado cambiarle el fondo a las tres escenas, pero al añadirle el actor a la escena lo pone encima del resto de actores que hay, por lo que no se ven los textos. Como ahora mismo la aplicación (GameSalad) va un poco lenta al cambiar entre escenas y actores (entre 15 y 30 segundos) prefiero dejarlo como esta.
5. Conclusiones.
GameSalad permite desarrollar juegos de una forma sencilla, aunque no he probado la distribución del juego a través de los medios que nos ofrece GameSalad, parece que también se puede hacer de forma sencilla y además podemos hacer que el mismo juego funcione tanto en el iPhone/iPad como en un navegador web.
Aunque se nota que todavía hay ciertos aspectos de GameSalad que pueden mejorarse parece una alternativa sencilla para la gente que siempre ha querido hacer un juego pero no lo ha hecho por no aprender un nuevo lenguaje de programación.
Si quereís hacer algún comentario, sugerencia o preguntar alguna duda podeís hacerlo en la zona de comentarios.
Un saludo.
César López.
hola! muy bueno el tutorial. Estoy empezando con esto (en windows) y me gustaría saber como hay que exportar para que tu juego funcione en un smartphone android, por ejemplo. Gracias!