miércoles, 21 de octubre de 2009

jueves, 15 de octubre de 2009

miércoles, 30 de septiembre de 2009

lunes, 24 de agosto de 2009

jueves, 20 de agosto de 2009

Polimorfismo.

En C++, a un puntero declarado como una clase A se le puede asignar una instancia de una clase B si éste es hijo de A.
Utilizo esta técnica para las escenas de mi nuevo proyecto, de tal forma que dentro un bucle principal que se encarga del refresco de la pantalla continuamente, se llama a un método de una clase instanciada en un puntero. Este puntero esta declarado como tipo "ClaseEscena" y tiene un método virtual que se encarga de actualizar los sprites. Sin embargo, en cada momento este puntero tiene una instancia de una clase hija de la "ClaseEscena", que implementa el método virtual de acuerdo con la escena de ese momento. Así, con un mismo bucle principal, tengo diferentes animaciones según convenga al juego.

viernes, 14 de agosto de 2009

Retomamos aficiones y dibujamos un poquito.


Hace mucho que no escribo nada aquí, pero sigo vivo. Vuelvo a tener tiempo libre, por lo que me he puesto a programar otra vez y he retomado este blog que, según las estadísticas, no lee nadie desde hace al menos 5 meses. Más o menos el tiempo que he estado ocupado.

¡Volvemos a programar! Esta vez me propongo un reto un poco más fácil. Imitar un viejo juego de Spectrum y Commodore 64 que se llamaba "Teclas Divertidas", aunque The Aberrant no está olvidado. Ya he creado un esqueleto con un bucle principal y tengo que crear un sistema de escenas y gestión de animaciones y respuesta a eventos.

De momento, pongo unas nubes que irán en la presentación del juego.

Prueba desde Facebook.

Estoy escribiendo este post desde una aplicación de Facebook para probar.

domingo, 8 de marzo de 2009

De vuelta en casa y curvas.

Ahora vivo en mi propia casa. Una cosa en la lista menos :)

Desde hace mucho tiempo siempre quise hacer una cosa en mis animaciones: curvas. Siempre he querido hacer que un sprite se mueva como en las presentaciones de los juegos de CAPCOM o SNK. La foto de un luchador haciendo pose que viene desde fuera de la pantalla a mucha velocidad y suavemente se coloca en la en su posición.
Para conseguier este efecto primero pensé en utilizar tablas de senos y cosenos para añadir un modificador a una funcion lineal simple. Pero siempre que lo intenté implementar, ni siquiera conseguí compilar.
Desde hace un tiempo tengo este libro de matemáticas para juegos. En uno de los capítulos, tras unas sesudas demostraciones matemáticas, enseña las fórmulas que describen cómo hallar un vector que interpola otros cuatro que describen el punto inicial, final y dos modificadores. En otras palabras, curvas Hermite y Beizer:


claseVector2D curvaHermite(Uint32 tInicial, Uint32 tFinal, Uint32 tAhora, claseVector2D p1, claseVector2D p2, claseVector2D t1, claseVector2D t2){
claseVector2D H(0,0);
if ((tAhora > tFinal)||(tAhora < tInicial)) return H;
double t=(double)(tAhora-tInicial)/(double)(tFinal-tInicial); // t es un valor entre 0 y 1
//printf("%f , %d, %d, %d\n",t,tInicial,tFinal,tAhora); // debug
H=((1-(3*t*t)+(2*t*t*t))*p1)+(((t*t)*(3-2*t))*p2)+(t*((t-1)*(t-1))*t1)+(((t*t)*(t-1))*t2);
return H;
}

claseVector2D curvaBeizer(Uint32 tInicial, Uint32 tFinal, Uint32 tAhora, claseVector2D p0, claseVector2D p3, claseVector2D p1, claseVector2D p2){
claseVector2D B(0,0);
if ((tAhora > tFinal)||(tAhora < tInicial)) return B;
double t=(double)(tAhora-tInicial)/(double)(tFinal-tInicial); // t es un valor entre 0 y 1
B=(((1-t)*(1-t)*(1-t))*p0)+(((3*t)*((1-t)*(1-t)))*p1)+(((3*(t*t))*(1-t))*p2)+((t*t*t)*p3); // se puede optimizar esta formula calculando (1-t) y pasandolo a una variable
return B;
}


Simple y eficiente. En otro post explico la implementación de "claseVector2D".

sábado, 7 de febrero de 2009

Sensación extraña

Volver a ver mi código después de tantos meses, es raro. En general lo entiendo bien, pero parece que algunas cosas son demasiado complicadas para lo que hacen.

Ahora que estoy en paro, tengo más tiempo para cacharrear y he descubierto esta pequeña joyita: irrlicht. He conseguido mover un cubo por una pista hecha en blender como si fuera un coche.

Creo que voy a volver con el proyecto e incluso iniciar otro para no terminar ninguno de los dos :)