Problema con colisiones

Hola!

Es la primera vez que escribo por aquí, así que voy a intentar explicarme lo mejor que pueda xD

Estoy haciendo un pequeño motor en as3 para un juegecillo y se me plantea la siguiente duda. En todos los sitios que hablan de colisiones he visto mil métodos para detectarlas y todas funcionan. He probado varias y todas funcionan bien, pero ahora tengo un problema que no se resolver.

Un ejemplo sencillo, un objeto empieza a moverse hacia abajo a 3 frames por segundo

http://imageshack.us/photo/my-images/208/dibujojyz.png/

Si la zona azul es donde debe colisionar y pararse, y en el frame entrante al calcular la colision no se produce el objeto continua... no se me ocurre nada para solucionarlo.

Obviamente el movimiento lo realiza en funcion del tiempo, si lo realizo en funcion de los frames el problema lo solucionaria pero cada vez que petardeara se quedaria congelado el juego... existe alguna solución?

Salu2 y Gracias
Es un problema clásico. Soluciones hay muchas y debes elegir la que mejor te venga a tí. La solución genérica sería utilizar los vectores de movimiento para los dos objetos junto a sus cajas de colisión, pero el cálculo se complica bastante.
kbks escribió:Es un problema clásico. Soluciones hay muchas y debes elegir la que mejor te venga a tí. La solución genérica sería utilizar los vectores de movimiento para los dos objetos junto a sus cajas de colisión, pero el cálculo se complica bastante.


Bueno, en parte me consuelas porque cuando te tiras semanas programando algo medianamente grande y te salen fallos como este , te sientes un poco gilipollas [carcajad]

La cosa esta en que los otros objetos no se mueven :S he hecho un tile engine y los objetos que detecta en la colision es el propio suelo.

En el pc, hasta que no hay 200 o 300 objetos no petardea, en mi tablet resiste un poco mas , pero hoy lo he probado en un galaxy S de un compañero y con 10 objetos ya empiezan a bajar los frames y a hacer cosas rarisimas... la cara de tonto que se me ha quedado ha sido epica :(

No hay otra solución?

:)

Gracias por contestar
Modifica el algoritmo para detectar la colisión y que detecte si se ha producido también en el camino que ha recorrido.

Es decir si el objeto va desde A hasta B, no solo mira si hay colisión en A y en B si no también en medio.
Normalmente, en la mayoría de juegos no es necesario tener un metodo para detectar las colisiones de forma continua si los colliders en el mundo lógico tienen un tamaño decente y no tienes objetos moviendose a una velocidad endiablada. En muchos casos si existen objetos así suelen ser proyectiles y cuerpos de este tipo. Para solucionar esto lo puedes hacer, por ejemplo en tu caso, extruyendo el volumen de colisión de quien se mueve en la dirección de movimiento y calculando si la hay o no. Esto sería un primer paso, después tendrías que calcular los puntos de contacto para dejar la pieza encima de la azul, pero esto lo podrías hacer facilmente por ejemplo con un simple test separndo los ejes de movimiento.

El tema de las colisiones aunque de primeras parezca algo sencillo, cuando te pones a hacer cosas y a investigar te das cuenta de que es aún hoy día un gran problema, y ya no hablamos del calculo de la respuesta a la colisión.

Un saludo.
5 respuestas