Novedades del Blog

martes, 27 de enero de 2009

Batman ya puede saltar.

Como ultima característica del Componente Navegacion ya he conseguido que Batman salte teniendo en cuenta las colisiones con objetos. De momento, este Componente ya esta acabado, aunque seguramente tenga que volver a hacer alguna pequeña modificación cuando implemente el componente de Items.

Mi siguiente objetivo sera la creación del Componente Portal que se encargara de detectar cuando se cambia de habitación y así cargar la siguiente.

sábado, 24 de enero de 2009

Frikadaaaaa!!!!!

Hace tiempo lo vi por Internet y me gusto bastante la idea de personalizar mi portátil, pero no tenia claro como. El martes buscando por Internet encontré la imagen, me decidí, ayer lo recibí y hoy mi portátil ya no es el mismo jejeje...



Las fotos no son muy buenas ya que están hechas con el móvil, pero de verdad, la calidad de la pegatina es altísima y lo mejor es que se puede quitar y poner sin marcas... menudo FRIKAZO que soy jejejje :)

viernes, 23 de enero de 2009

Teniendo en cuenta a Newton...

Ayer por la noche conseguí acabar la implementación de la gravedad, de momento, solo acusaran la gravedad las entidades que se mueven o lo que es lo mismo, aquellas que tengan el Componente de Navegación.

Aunque espero optimizarlo, ahora mismo, se hacen dos comprobaciones de colisiones por ciclo, una para el eje Y y otro para el eje X o Z. Aunque creo que podría hacerlo con una sola comprobación, no voy a complicarme mas, ya que no se aprecia penalización en el framerate haciendo 1 o 2 comprobaciones. Por suerte, esa comprobación de colisiones, es un proceso que me ha quedado bastante bien y no consume apenas tiempo de reloj jeje:)
El esquema básico es este:

1º Coloco la entidad en la posición del eje Y indicada (si salta aumento en Y y si cae disminuyo en Y).
2º Compruebo si colisiona con alguna entidad.
3º Si hay colisión vuelvo a colocar la posición del eje Y en la posición antigua que no colisionaba, sino dejo la posición Y en la misma posición.
4º Coloco la entidad en la posición del eje X o Z indicada (dependiendo en que dirección se mueve la entidad)
5º Compruebo si colisiona con alguna entidad.
6ºSi hay colisión vuelvo a colocar la posición del eje X o Z en la posición antigua que no colisionaba, sino dejo la posición X o Z en la misma posición.

Este componente solo lo tiene Batman, porque es la única entidad que es manejada por el usuario, pero cuando implemente la Navegación con IA para los NPCs, tendrán que tener la opción de activarla o no.

Lo siguiente que tengo que hacer es que salte la distancia y el tiempo exacto al original, cosa que parece sencilla, pero después de estudiarlo un poco, tiene su miga.

lunes, 19 de enero de 2009

Facilitar el paso por las puertas

Como en su edición original, estos días he estado implementando la acción de que cuando este cerca de una puerta y se dirija hacia ella, el personaje se desplaza lateralmente en busca de el hueco de la puerta. He puesto un vídeo para que se vea mejor:




También he corregido algunos bug en los Bounding Box que no cogían bien el offset aplicado a algunas entidades y provocaba pequeños fallos en las colisiones.

Ahora intentare implementar la gravedad y que Batman pueda saltar, con estas dos funcionalidades más, daré por terminada la implementación del Componente de Navegación.

miércoles, 14 de enero de 2009

Mi dia del pajaro (My birthday) :) jajaja

Pues eso mismo que hoy es mi cumple y lejos de tener un día tranquilo, ha sido un día bastante completito, a partir de ahora es cuando voy a tener un par de horas mías.

Espero que para el año que viene por estas fechas, como mucho, pueda yo regalaros una versión del Batman totalmente operativa y descargable, y por supuesto, totalmente GRATIS jejeje...

No creáis que porque sea mi cumple hoy voy a descansar, voy a intentar acabar una cosita nueva que estoy implementando...jeje.

jueves, 8 de enero de 2009

Subcolisiones de Colisiones

Después de implementar las colisiones AABB, me surgió un pequeño problema, y era como hacer para que Batman pudiera pasar por el hueco de la puerta, si toda la puerta era un cubo contra el que colisionaba. Al final lo he conseguido como se muestra en la imagen:


Para conseguir esto pensé varias opciones:

La primera opción (fue la que use en la versión C++ hace 2 años) era crear un cubo dentro del bounding box llamado 'área no colisionable', en el cual, como su nombre indica, no colisionaría otra Entidad. El proceso seria mirar si se colisiona con el Bounding Box y en caso afirmativo, mirar que no se colisione con ese área dentro del Bounding Box. Para las puertas era suficiente pero no me acababa de convencer.

La caja roja seria el Bounding Box de la Entidad y la caja verde el 'área no colisionable' del Bounding Box.


La segunda opción (la que he implementado ahora) es crear varios Bounding Box dentro del Bounding Box genérico que contiene toda la entidad. Primero hago las comparaciones con los Bounding Box genéricos y si se produce alguna colisión (Colision) , miro uno a uno sus Bounding Box de dentro (Subcolisión), lo que me permite hacer el hueco de la puerta y mas precisión en las colisiones.

La caja roja seria el Bounding Box genérico que contiene todo la entidad, después en azul claro hay 2 Bounding Box mas pequeños que serian las columnas de la puerta y de color azul oscuro el tercer Bounding Box para la parte superior de la puerta.

Estos Bounding Box se especifican en el fichero de configuracion de la malla, mediante coordenadas y mediante el ancho, alto y profundidad de cada uno de ellos.

sábado, 3 de enero de 2009

Las colisiones AABB ya funcionan

Hace algunos días que ya lo tengo implementado, pero ahora que estoy de vacaciones, tengo menos tiempo de actualizar el blog que cuando estoy trabajando :).
He utilizado el método AABB (Axis Aligned Bounding Box) que es de los mas simples que hay, pero para este juego tampoco hace falta mayor precisión.

Para usar este método se mira si colisionan dos cajas (2D o 3D dependiendo del juego) pero con la particularidad de que los lados de las Bounding Box tienen que ser paralelos a los ejes de coordenadas.
Después cogemos la esquina mas cercana y la mas alejada del eje de coordenadas de los Bounding Box que queremos saber si colisionan y las comparamos de la siguiente manera:

v3AMax y v3AMin son las esquinas de una BB A.
v3BMax y v3BMin son las esquinas de otra BB B.

if (v3AMax.x <> v3BMax.x)
return false; //no hay colisión
if (v3AMax.y <> v3BMax.y)
return false; //no hay colisión
if (v3AMax.z <> v3BMax.z)
return false; //no hay colisión

return true; //si no ha entrado en ningún if es que hay colisión


Como he dicho antes, este método es de los mas simples de implementar y según he leído se usa bastante en los juegos junto con algún método mas exacto, primero se miran las colisiones de cajas grandes para una primera aproximación y después se usan otros métodos mas específicos y exactos.