Limitaciones:
1) Solo se detecta colisión en el area rectangular del displayObject que se le pase como parametro
2) Solo se detecta la colisión entre un punto especificado ("x" e "y") y un movieclip, (no movieclip con movieclip)
3) El punto de registro del movieclip tiene que estar en el angulo superior izquierdo, de lo contrario hay que
improvisar una solucion que explico mas abajo en el comentario del ejemplo de uso.
¿Que tan liviano es comparado con HittestPoint con shapeFlag seteado como false (el metodo de flash para la misma tarea)?
En el ejemplo de uso que incluyo mas abajo, utilizando hittestPoint con shapeflag en false la operación tomo 13 milisegundos y en cambio con esta funcion tomo 3, es decir, es 4,3 veces mas liviana.
Modo de uso:
Código ActionScript :
trace(hittestPointLiviano(150,30,miMovieClip)) //Devuelve true o false
La funcion:
Código ActionScript :
function hittestPointLiviano(x:Number,y:Number,mc:Object):Boolean { if(x > mc.x){ if(y > mc.y){ if(x < mc.x + mc.width){ if(y < mc.y + mc.height){ return true } } } } return false }
Ejemplo de uso con un comentario útil para los que tienen un movieclip con un punto de registro que no esta en el angulo superior izquierdo:
Código ActionScript :
private function balaTocaPersonaje() { var bala = 0; for (var i:int = 0; i < 970; i++) { posicionBala.x++;//Para programar una verdadera bala habria que usar trigonometría pero esto es un ejemplo simplificado posicionBala.y++; for (var j:int = 0; j < arrayPersonajes.length; j++) { //Si el punto de registro del mc que va a colisionar no esta el angulo superior izquierdo hay que //restarle al parametro "x" e "y" la distancia que tiene el punto de registro desde lo que seria el //punto superior izquierdo if (hittestPointLiviano(posicionBala.x - 3,posicionBala.y - 25,arrayPersonajes[j])) { return true; } } } return false; }
Si a alguien sabe como hacer que sea todavía mas liviana, estaría bueno que hagn un reply con el codigo.
Saludos.