¿Como funciona el sistema de detección de colisión del “Engines Of Creation”?

25 07 2007

HectorCS escribe a la…¿redacción? :-| , de weremsoft y, después de hacer los elogios y las críticas de rigor, nos dice :

“Me encantaria poder saber como funciona el sistema de detección de colisión”

Debido a la hora que es, voy a ser un poco escueto, por lo que si no se entiende pregunten que para eso están los comentarios.

Estimado Hector, busque en varios artículos al respecto pero finalmente terminé descartandolos a todos(porque no los entendía) y arreglandomelas solo, cosa que no se si aconsejar o prohibir descaradamente(en todo caso, lean y experimenten en proporciones razonables).

Para comenzar, notá que el cuerpo no es solido, sino que las colisiones se detectan solo con los vértices. La forma de simular dinámica de partículas la explico en mi tutorial Simulación de Sistemas Complejos I.

Como podrás notar en el artículo al que hago referencia, la partícula, aparte de las coordenadas x e y que definen la posición actual, guarda las coordenadas de la posición anterior para calcular la velocidad y el sentido.

Para calcular las colisiones y las reacciones de estas, lo que hice fue que para cada partícula, aparte de la posición actual y anterior, guardo ultima posición buena conocida, esto es, la ultima posición en la cual no hubo colisión con el terreno. Esto lo verifico por medio de la función hitTest del objeto movieClip. En el caso de que detecte una colisión con el terreno, lo que hago es trasladar la partícula a la ultima posición buena conocida. Eso es todo, simple ¿no?.

Este algoritmo permite generar reacciones bastante convincentes sobre escenarios de cualquier naturaleza, lo cual me da pié para contestar tu segunda pregunta que es:

“como hiciste para hacer los levels? armaste un editor?”

No, no armé ningún editor, es simplemente un movieClip(un objeto flash de determinadas características). Esto me permite armar los niveles dibujándolos con las herramientas que provee flash. Por lo que si tomase el pincel e hiciera un rulo en la pantalla, el triangulito seguiría funcionando lo mas bien.

Actualmente pienso presentar el juego en uno que otro concurso(después de arreglar varias cosas que me han señalado oportunamente). Cuando me haya convencido de que no puedo ganar ni un caramelo pienso liberar el código para confundirlos más todavía.

Algunas consideraciones que creo conveniente señalar son:

1. Debido a la naturaleza cuadro por cuadro de la animación, el algoritmo no sirve para altas velocidades.
2. La configuración del cuerpo no se lleva bien con escenarios “angulosos” porque se traba, este hecho lo uso en el ultimo nivel, donde tenés que ir trepando por el techo y si te soltas caes sobre unos pinches que te dejan inmovilizado, obligándote a comenzar de nuevo el nivel. Moraleja, aprovechar las desventajas del algoritmo de turno para convertirlas en ventajas siempre que sea posible.

Espero haberte iluminado. Muchas gracias por preguntar.

Adiós! y sigue mirando al cielo!


Acciones

Informacion

2 respuestas a “¿Como funciona el sistema de detección de colisión del “Engines Of Creation”?”

30 07 2007
HectorCS (23:46:01) :

Gracias por la respuesta :D. Me habia hecho la idea de que estabas ocupado o te habias colgado para responderme (por que a mi me suele pasar) Pero de vuelta por curiosidad revisando tu pagina me encuentro una respuestapost :) Me parece buenisima y super simple tu solucion. No se me hubiese ocurrido que sea tan performante. Me imagino que con un mapa con geometria mas compleja o simplemente mas grande puede ponerse lento, pero definitivamente parece una buena tecnica para hacer escenarios irregulares (yo no sali de los tiles cuadraditos todavia) Habia visto antes los articulos a los que haces referencia y ahora me queda mucho mas claro todo. Gracias! Espero poder hacer algunos experimentos con esta tecnica y obtener tan buenos resultados como en tu juego. Felicitaciones de nuevo keep it up :)

31 07 2007
pablo.weremczuk (00:20:28) :

Lamento la falta de feedback Hector. Gracias por visitar la página.

Un abrazo.

Deje un comentario

usted puede usar estos tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word