Это действительно зависит от формы. Если это простая геометрическая фигура (или вы можете использовать ее для столкновения), то вы можете использовать один из сотен методов столкновения луча / формы в сети.
Если это очень специфическая фигура, то одна из вещей, которую вы можете сделать, это пройтись по вашему лучу и выполнить вызовы hitTestPoint () для вашей фигуры. Примерно так (грубо):
var ray:Point = new Point( x2 - x1, y2 - y1 ); // get the ray
// we want to check in, say 10 steps. depending on the length of the ray, you can increase/decrease this
var steps:int = 10;
// scale the ray
ray.x /= steps;
ray.y /= steps;
// step along the ray
var start:Point = new Point( x1, y1 );
for( var i:int = 0; i < steps; i++ )
{
// hit test against the shape
if( myShape.hitTestPoint( start.x, start.y, true ) )
{
// it's intersecting, do something
break;
}
// it didn't intersect, keep going
start.x += ray.x;
start.y += ray.y;
}