December 17, 2005
Flash 8: Hitting Bitmaps with the concatenatedMatrix

I always wondered when I would find a use for MovieClip.transform.concatenatedMatrix - finally I've found one. It becomes very useful when you try to detect if you've hit a BitmapData object under your mouse pointer - especially if that bitmap is nested inside one or more movieclips that have been scaled or rotated. Think of it like the localToGlobal for bitmaps - just a little bit more elegant.

Here's a code to do that:

var m:Matrix = mc.transform.concatenatedMatrix;
// mc is the clip that holds the bitmapData Object

m.invert();
// that's the trick - by inverting the matrix
// we can map the mouse coordinates back into the mc

var mp:Point = new Point( _root._xmouse, _root._ymouse );
// the current mouse coordinates as a Point
// note _root is not evil here, because that's
// the same level as concatenatedMatrix points to

var p:Point = m.transformPoint( mp );
// transform the mouse coordinates
// through the inverted matrix

if ( myBitmap.hitTest( new Point(), 8, p ) ){
// and make the hit test
// 8 in this case is the minimum alpha level
//to count as a hit

trace("bitmap hit");
}

And here is a demo:




That's just a few random bitmaps with alpha that get moved, scaled and rotated - when you roll over one of their opaque areas they start flickering.

Posted at December 17, 2005 04:44 PM | TrackBack (0) | Further reading
Comments
Post a comment
Name:


Email Address:


URL:


Comments:


Remember info?



Site Search

Google
quasimondo.com
incubator.quasimondo.com
lectures.quasimondo.com
Most Visited Entries
Experiments
Lectures
Contact
Backlog
In Love with
Powered by