miércoles, 25 de abril de 2012

Y finalmente tenemos nombre

Nuestra criaturita es muy simpatica pero le falta aun una cosa... un nombre. Despues de mucho pensar creo que lo apropiado debería ser que tuviera algo que ver con ojos así que finalmente hemos decidido llamarlo... (redoble de tambor).
MEKUN

El nombre esta formado por el romaji de ojo en japones que es ME y por KUN que es un honorifico del mismo idioma.

lunes, 23 de abril de 2012

Del dibujo al codigo

El primer problema que me planteé fue el de construir un mecanismo que me permitiera mostrar por pantalla una animación sin que nadie interactuara con ella.


Una animación es, a fin de cuentas, una secuencia de frames o cuadros o fotogramas o como quieras llamarlo. Al pasar estas imagenes muy rápido se da una sensación de continuidad, nada más que con mirar los gif que he puesto en posts anteriores nos damos cuenta de esto.

Teniendo esto en mente y llevandolo al contexto del juego un sprite sería por lo tanto un elemento en el juego que dispone de un conjunto de animaciones. El personaje principal sería un sprite y tendría sus animaciones asociadas a diversas acciones como correr, saltar, disparar o lo que sea que haga.

En resumen, tenemos que un sprite tiene varias animaciones y una animación esta formada por frames. Todo esto me da la información que necesito.
Los detalles de la implementación de cada uno se pueden ver en los ficheros Frame.cpp, Animation.cpp y Sprite.cpp. Recuerdo que se puede ver el código aquí.

Esta sería una primera aproximación como ya he dicho y a medida que me vayan surgiendo necesidades ire añadiendole más o menos funcionalidad.

Antes de seguir, tengo que explicar un poco la clase SDL_Rect de, obviamente, SDL. No es mi intención enseñar aqui C/C++ ni convertir esto en una referncía a la librería usada ya que existen muchas y mejores de lo que yo puedo poner en un blog, por ejemplo esta Wiki.

Una forma fácil de entender esto es imaginar que tenemos todas los frames de nuestro personaje en una sola imagen, pongamos un bmp, y claro... no podemos coger y sacar todo este bloque por pantalla solo queremos que salga un trocito de la misma cada vez. Pues para eso tenemos la clase SDL_Rect que vendría a ser un cuadrado de referencía del trocito que queremos mostrar.

Si aun no lo pillas podemos hacer algo más empírico y molón, te imprimes una secuencia de animación de las que he puesto por aquí luego coges un folio en blanco y recortas un cuadrado del tamaño de uno los frames de la secuencia y lo pones encima de lo impreso. El cuadrado recortado sería nuestro SDL_Rect.

Por lo tanto tendremos una imagen grandota con todos las cosas que usaremos en nuestro personaje y luego una referencia al trocito de esta que queremos mostrar. Pero vamos a complicarlo un poco más ya que me doy cuenta de que pasa si nuestro bichito mueve la cola, parpadea, anda o en resumen combina acciones. Si lo hago de esta manera tendría que hacer secuencias para todas las combinaciones posibles y eso la verdad que es mucho trabajo forzando mis ya pocas habilidades pictoricas.

Para evitar esto haré que un frame tenga un conjunto de refencias o clases SDL_Rect. De esta forma podría tener un conjunto de cabezas, piernas, colas y demás en una imagen e ir cogiendo referencias de aquí y de alli hasta montar al personaje cual Frankestein.

Cuando haga los dibujos seguiré haciendolos de cuerpo entero ya que esto lo hace más fácil (al menos para mi) y llegados el momento los desmontaré y cogeré solo lo esencial.

Por cierto (y para acabar ya), he hecho que cuando se añada un frame o una animación se haga una copia del mismo de forma que puedas liberar el espacio del original a añadir... no se si esto es muy correcto o si al final me dará más trabajo pero sigue siendo lo primero que se me ha ocurrido y poco a poco lo iré puliendo.

lunes, 26 de marzo de 2012

Un paso mas

Antes de ponerme a meter cachos y cachos de código por aquí y hacer esto una locura voy a tomar un camino más razonable.

En primer lugar voy a abrirme una cuenta en SourceForge y hacer un repositorio, luego subiré el código y los ejecutables que vaya generando con TortoiseSVN.

Para ello una vez abierta la cuenta y que nos den espacio para el proyecto debemos obtener la URL del repositorio pulsamos con el botón derecho del ratón en la carpeta que tenemos el código y aparece la opción SVN Checkout... una vez aquí metemos la URL, luego el login y password. Finalmente botón derecho otra vez en la carpeta, submenu TortoiseSVN e Import... Voila! Fácil y rápido... ya tenemos todo subido.

Con esto se tendrá un acceso bastante simple al código. Bueno lo que llevo hecho se puede ver en este enlace. Ya explicaré en otras entradas de que va todo esto, intentaré hacer los diagramas y no liarme mucho explicando... tenedme paciencia.

El objetivo de todo esto es aprender o al menos sacar algo... no se si finalmente se llegará a algo curioso, espero que sí. Por lo menos espero divertirme en el proceso y si alguien más puede disfrutarlo pues mejor que mejor.

Para terminar pongo una frase que me gusta mucho:

"Focus on the journey, not the destination. Joy is found not in finishing an activity but in doing it" - Greg Anderson

miércoles, 21 de marzo de 2012

El bucle de juego


Si señor/a, veamos lo que es esto del bucle de juego.

La forma de programar un juego se reduce a un bucle en el que se repite una secuencia básica. Esta que tenenmos aquí.
La cosa se puede complicar más o menos añadiendo más pasos pero básicamente es esto.

En un primer paso capturamos los eventos y entradas del usuario, es decir, vemos que ha hecho nuestro jugador. Una vez tenemos esto tratamos la lógica interna del juego que consiste en calcular la nueva posición del jugador, mover los enemigos y disparos, colisiones, ver la posición del mapa, sumar la puntuación, etc.. en resumen, todas las acciones que marcan un paso en la evolución del juego.

Finalmente queda mostrar todo lo anterior al usuario por pantalla y vuelta a empezar.

Así de sencillo parece, pero la cosa se puede complicar muchisimo.

Bueno, ya se que poco código ha habido aquí hasta ahora... pero para el siguiente pondré una primera aproximación (porque es de la primera forma que se me ha ocurrido) a una implementación de como mostrar
un Sprite animado en pantalla a ver que tal.

Por cierto, el diagrama de la imagén esta hecho con Dia Diagram Editor que no esta nada mal... he probado algun otro pero este resulta muy sencillo de manejar.

viernes, 16 de marzo de 2012

Siguiente Secuencia

Vamos con otra secuencia, en esta nuestro bichito se pone en posición para empezar a andar. Cada frame esta hecho con el GraphicsGale que la verdad ha sido todo un descubrimiento, hace el tratamiento pixel a pixel supersencillo... 100% recomendado, además aunque se me da fatal el dibujo me hace menos tediosa esta parte.


Ahora que lo veo creo que me esta quedando algo grandote pero bueno ya me ha salido así y me da pereza hacerlo más chico, a ver que tal queda al final. La secuencia animada quedaría así.


Lo siguiente será que de unos pasitos y salte, luego seguiré con los ojitos. Más adelante, si la cosa marcha y es necesario, le meteré más frames a las animaciones para hacerlas más fluidas.