Cuando los objetos se mueven independientemente del framerate

28 07 2008

Uno de los problemas con los que me encontré al independizar el movimiento de los objetos del framerate fue con las colisiones. Si estas utilizando una intersección por intersección de cajas de colisión y la cantidad de frames omitidos es muy grande, muchas colisiones no se registran.

Esto es un dolor de cabeza si es necesario agregar premios en el juego que dependen de las colisiones(agarrar todos los powerups o no colisionar contra nada).

En estos casos una buena alternativa es utilizar colisión por segmentos u alguna otra forma mas adecuada, basada en proyecciones.



Modo multiplayer de Crash of Titans para wii

3 07 2008

Estuve jugando el trabajo al Crash of Titans para wii y me pareció uno de los mejores títulos para la consola por muchos aspectos, como lo son los cuidados escenarios en los que se desarrolla el juego, el satírico humor(con muchas referencias a películas) y las divertidas cutscenes.

Pero hay un detalle que realmente me llamó la atención especialmente, y es el modo multiplayer cooperativo.
Imaginen un juego tipo “Mario Galaxy”, donde hay un solo protagonista, y queremos que otra persona pueda sumarse en cualquier momento con solo tomar el otro mando wii.

Podríamos agregar un personaje y dividir la pantalla en dos, para que cada jugador pueda seguir su camino independientemente uno del otro. Esto tiene como problema que los jugadores pueden perderse por el escenario o podría volverse tedioso para el mas experto si se ve retrasado por su co-equiper.

La otra opción es hacer las cosas al estilo Mario Galaxy, en el cual un jugador controla al personaje principal, mientras el otro junta estrellitas pasivamente o, a lo sumo, dispara con el cursor para atontar a los enemigos(buuuuuu).

Ahora, Crash Of Titans resuelve este dilema de la siguiente manera:

Sigue habiendo un solo personaje, un jugador lo controla totalmente mientras el otro “colabora” juntando unas burbujas que se caen de los enemigos o de los elementos del escenario que son destruidos. Ahora, la cosa cambia cuando el jugador que controla al personaje salta, cuando este toca la tierra, el otro jugador toma el mando del personaje inmediatamente.

Este gran acierto del diseño es una verdadera genialidad, cada jugador esta todo el tiempo atento a que le toque su turno, lo cual pasa muy seguido, ya que el juego es un plataformero y hay que saltar mucho mucho mucho.

Recomiendo ampliamente Crash of Titans, una verdadera joya que no ha sido debidamente valorada.



Google aprendió a indexar flash.

1 07 2008

Si señores, ahora google indexa el contenido de texto de sitios flash. Desde botones hasta menues, incluyendo sitios totalmente hechos en flash. Para mas información sigan el link:

http://googleblog.blogspot.com/2008/06/google-learns-to-crawl-flash.html

Salutes!



Cuidado con los “Singletons”

1 07 2008

Una solución rápida cuando uno necesita un dato desde varios lugares es crear un singleton. Pero hay que tener cuidado con ellos.

Un singleton tiene la particularidad de que no se destruye nunca(sobre todo en lenguajes como java o actionscript), porque la referencia que tiene dentro de si impide que el garbaje colector lo recicle.

Si usamos un singleton, debemos tener cuidado de que no tenga procesos, estos siguen ejecutándose aún en estados del programa en el que no son necesarios. Mas procesos ejecutandose = mas ciclos del procesador por loop = menos frames por segundo.

En un programa orientado a objetos, las clases suelen distribuirse en forma de árbol. Cuando debamos utilizar un dato en dos clases que estan al mismo nivel pero “no se ven”, antes de utilizar un singleton debemos buscar la primer clase padre que tengan en común. Localizada la clase tenemos dos opciones:

1. Pasar la referencia al dato a travez de constructores. Esto no es muy recomendable, porque complica la interface de las clases(hay que agregar un parámetro a los constructores)

2. Que la clase que necesita el dato dispare un evento, el cual posee una referencia a si misma. El evento debe ser del tipo bubble, es decir, si la clase donde esta la referencia al objeto que dispara el evento no lo atrapa, el evento es relanzado hacia arriba en la jerarquía de clases hasta que alguna lo procesa. En la clase padre identificada previamente, capturamos el evento y seteamos el valor requerido en el objeto solicitante(cuya referencia nos llega en el evento).

Adieu!