Detección de superposición de dos objetos de forma irregular

Siento repetir el post, ya que lo acabo de publicar en Gerneral Discution en el foro pero al no tener respuestas y sentirme más comodo en mi lengua materna creo que es buena idea ponerlo aquí.

Os cuento el problema con el que llevo varios días peleando, dado que el título no creo que lo explique mucho.

En el proyecto en cuestión quiero tener un custom listener (en el que evalúo si se cumplen las condiciones en cada enterFrame), para sí obtener cuando un objeto abandona el area de una carretera.

La carretera en sí consta de varias partes que se mueven continuamente en un bucle. Por ello y dado al alto número de de mundos y partes de la carretera me gustaría evitar en la medida de lo posible el uso de física, ya que tendría que crear manualmente y de una manera poco precisa la forma de cada cuerpo (cada parte de la carretera)

La primera solución que pensé fue crear mascaras de cada parte de la calle y crear la forma del objeto con 5 puntos estratégicos relativos al objeto. De este modo en cada frame crearía un touch event falso con las coordenadas del punto, sabiendo cuando está dentro de la calle siempre que se active el evento en la calle (isHitTestMasked). Sin embargo, la única forma de emular el evento que conozco es dispatchEvent, el cual siempre activa el listener aun cuando las coordenadas estan fuera del area maskeada. Aunque todos los listeners, mascaras y puntos ya están desarrollados y funcionando, no logro hacer que se active el evento sólo en el area con máscara

La otra opción que se me ocurre es conseguir la información del pixel de cada punto estratégico del objeto, usando un bitmap de la máscara de la carretera. Sin embargo, no he encontrado información fiable sobre bitmaps en corona y me temo que no hay manera de usar esta valiosa característica.

Muchas gracias por la ayuda de antemano!

Es un poco difícil hacerse una idea sólo con lo que cuentas pero creo que lo que debes hacer es utilizar la física y hacer que los márgenes de la carretera sean dos cuerpos físicos. Depués puedes programar la colión entre el coche / objeto móvil y los márgenes de la carretera. Si quieres dame más detalles a ver si puedo ayudarte.

Saludos,

Josep Alemany

Gracias por la respuesta, tarde un día entero en encontrar una solución y hacerla funcionar con un consumo eficiente de memoria, pero al final creo que las horas invertidas merecieron la pena.

La solución que me propones es la que intentaba evitar a toda costa, dado que hay en torno a 30 mundos y cada uno tiene diferentes tramos de carretera. Paso a comentar mi decisión final por si le sirve a alguien.

La solución se basa en la creación un lector lua del bitmap de la máscara de cada tramo de carretera, de este modo, en cada frame reviso el bitmap, y obtengo si hay un pixel negro en cada uno de los puntos de referencia de mi objeto.

Lo que sí creo que es interesante decir, para alguien interesado en almacenar bitmaps en memoria, es que un bitmap de 1024x768 pixels (ipad) realentiza sobremanera la aplicación.
De este modo, tengo un bitmap más pequeño (128x76), creando una función que me ayuda a traducir la coordenada a la tabla 8 veces más pequeña.

Si alguien está interesado en el lector bitmap, esta clase me fué de gran ayuda y funciona correctamente.

https://bitbucket.org/itraykov/agen-utils/src/64341c10f23f/bmp.lua

Un saludo, José Alonso

EDIT: Increible que me censuren la palabra n.e.g.r.o en referencia al color del pixel…

Es un poco difícil hacerse una idea sólo con lo que cuentas pero creo que lo que debes hacer es utilizar la física y hacer que los márgenes de la carretera sean dos cuerpos físicos. Depués puedes programar la colión entre el coche / objeto móvil y los márgenes de la carretera. Si quieres dame más detalles a ver si puedo ayudarte.

Saludos,

Josep Alemany

Gracias por la respuesta, tarde un día entero en encontrar una solución y hacerla funcionar con un consumo eficiente de memoria, pero al final creo que las horas invertidas merecieron la pena.

La solución que me propones es la que intentaba evitar a toda costa, dado que hay en torno a 30 mundos y cada uno tiene diferentes tramos de carretera. Paso a comentar mi decisión final por si le sirve a alguien.

La solución se basa en la creación un lector lua del bitmap de la máscara de cada tramo de carretera, de este modo, en cada frame reviso el bitmap, y obtengo si hay un pixel negro en cada uno de los puntos de referencia de mi objeto.

Lo que sí creo que es interesante decir, para alguien interesado en almacenar bitmaps en memoria, es que un bitmap de 1024x768 pixels (ipad) realentiza sobremanera la aplicación.
De este modo, tengo un bitmap más pequeño (128x76), creando una función que me ayuda a traducir la coordenada a la tabla 8 veces más pequeña.

Si alguien está interesado en el lector bitmap, esta clase me fué de gran ayuda y funciona correctamente.

https://bitbucket.org/itraykov/agen-utils/src/64341c10f23f/bmp.lua

Un saludo, José Alonso

EDIT: Increible que me censuren la palabra n.e.g.r.o en referencia al color del pixel…