Proyectos => IndieLib => Mensaje iniciado por: Loover en 04 de Marzo de 2008, 07:52:37 pm

Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: Loover en 04 de Marzo de 2008, 07:52:37 pm
Una vez más necesito que probeis una cosilla y me digais si os funciona correctamente. Esta vez se trata de una prueba de colisiones:
http://www.pixelartgames.com/temporal/lib_collisions.rar

Manejo
- Con el ratón mueves al tio sentado sobre el bicho
- Con las teclas izquierda y derecha disminuyes o aumentas al tio del cohete

Colisiones
En, esta prueba, que más adelante será un tutorial, le meto a cada sprite una serie de áreas (circulares o triángulares) por grupos. Por ejemplo, en los motores del cohete, ambos motores, forman un grupo de 4 triángulos llamado "engines". Luego, con otros sprites que tienen otros grupos de colisión, chequeo si están en colisión.

Lás areas se pueden insertar en los sprites directamente mediante código (SetBoundingTriangle, por ejemplo), o cargándolas directamente desde un fichero .xml:

Código: [Seleccionar]

<?xml version="1.0" encoding="utf-8"?>
<bounding_areas>
<circle id="rocket_boy_head" x="120" y="65" radius="65" />
<triangle id="rocket_head" ax="352" ay="152" bx="300" by="127" cx="300" cy="175" />
<rectangle id="engines" x="20" y="187" width="106" height="30" />
<rectangle id="engines" x="20" y="105" width="40" height="30" />
</bounding_areas>


Lo interesante es que a las animaciones, también se le pueden asignar áreas POR FRAME, de forma que vereis a un espadachin moviendo una espada y como las áreas se ajustan a esta.

Además, las áreas se ajustará automáticamente aún cuando rotes o escales los sprites.

Importante: Me interesa mucho que lo pruebe alguien que tiene el Vista y me diga sino le da un mensaje de error al salir.

Un saludo y gracias por adelantado.

PD: Este post se lo de dedico a Pogacha, por la jartá a código que puso en el hilo en el que pregunté la colisión entre un triángulo y un círculo :)

[edit]
Para que no me digais cosas del tipo: "esto falla, la cabeza de la mariquita no colisiona con no sé qué". Estas son las colisiones que he querido chequear:

Código: [Seleccionar]

if (mI->Entity2dManager->IsCollision (&mRocket, "engines", &mBeetle, "beetle_boy_head"))
mTextSmallWhite.SetText ("Collision between rocket boy head and engines");

if (mI->Entity2dManager->IsCollision (&mRocket, "rocket_head", &mBeetle, "beetle_head"))
mTextSmallWhite.SetText ("Collision between rokect head and beetle head");

if (mI->Entity2dManager->IsCollision (&mRocket, "rocket_boy_head", &mBeetle, "beetle_boy_head"))
mTextSmallWhite.SetText ("Collision between rocket boy head and beetle boy head");


if (mI->Entity2dManager->IsCollision (&mBeetle, "beetle_boy_head", &mSwordMaster, "sword"))
mTextSmallWhite.SetText ("Collision between beetle boy head and the sword");


(http://www.pixelartgames.com/temporal/colisiones_01.jpg)
Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: Vicente en 04 de Marzo de 2008, 08:32:17 pm
No peta en Vista :) (al menos no en el mio, 64 bits)

Muy bueno el sistema de colisiones que se mueva cada frame, la verdad que la librería tiene una pinta buena buena :)

Un saludo!

Vicente
Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: [EX3] en 04 de Marzo de 2008, 08:35:54 pm
A la perfeccion :) 292fps de media, las colisiones las notifica y sin petar al salir.

Apple MacBook Intel Core 2 Duo 2.16GHz, 2GB RAM, Intel Graphics 950GM (drivers actualizados), Windows Vista Business, DirectX 9.0c (actualizacion Noviembre 2007)

Que fue al final lo que hacia petar al salir en los otros test?

Salu2...
Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: Loover en 04 de Marzo de 2008, 08:40:18 pm
¡Oh sí! ¡No peta! ¡NO PETA! ¡Gracias por probarlo!

Lo que le hacía petar era un fallo que le hacía petar SOLO al compilar en Debug en los XP o en Debug/Release en los Vista. Y solo con vc2008. No tengo el vista, así que probé a solucionar este error tan raro en Debug en Xp y se ha solucionado así también para vista.

Para cada Manager, en el .h donde estaba la clase, tenía una variable miembro tal que:

list <OBJETO_MANAGER*> mList;

No sé por qué, eso no le gusta al nuevo vc2008. Se soluciona así:

list <OBJETO_MANAGER*> *mList;
Y luego en el constructor, hacemos un new de la lista para asignarle memoria.

No entiendo por qué, pero es así. ¿Bug del vc2008? ¿Algo que no sé de las STL? El caso es que ahora cada vez que creo un tipo de dato abstracto de STL siempre lo hago mediante punteros y haciendo luego un new.
Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: Zaelsius en 04 de Marzo de 2008, 09:00:30 pm
Paradójicamente, a veces este tipo de bugs son más bien errores derivados de una mayor conformidad con los estándares por parte del compilador. O no, quién sabe :D

Yo hace poco que he empezado a usar el 2005 en vez del 2003, porque este tipo de cosas son las que me dan miedo a ser un "early adopter" cuando se trata de software crítico.

¡Suerte y a ver si encuentras la fuente del problema!
Título: Prueba de colisiones por áreas - Se necesitan testers
Publicado por: Loover en 04 de Marzo de 2008, 09:12:37 pm
Citar
¡Suerte y a ver si encuentras la fuente del problema!


Creo que era esa la fuente del problema, por lo menos ahora compila y se ejecuta perfecto en xp / vista bajo vc2008 y D3D9. Falta testearlo en vc6, porque me gustaría tenerla compilado en al menos esos dos.