
Код AS3:
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.display.Bitmap;
import flash.geom.ColorTransform;
import flash.display.IBitmapDrawable;
import flash.display.DisplayObjectContainer;
var s1:Sprite = new Sprite();
var s2:Sprite = new Sprite();
this.addChild(s1);
this.addChild(s2);
s1.graphics.beginFill(0xFF0000);
s1.graphics.drawRect(0, 0, 100, 200);
s1.rotation = 60;
s1.transform.concatenatedMatrix
s2.graphics.beginFill(0xFF0000);
s2.graphics.drawCircle(50, 50, 50);
s2.scaleX = .5;
s2.x = 150;
s2.y = 150;
s1.startDrag(true);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event):void{
s1.transform.colorTransform = new ColorTransform();
if(test(s1, s2)){
s1.transform.colorTransform = new ColorTransform(
1, 1, 0, 1,
0xFF,
0,
0xFF
);
}
}
function test(s1:DisplayObject, s2:DisplayObject):Boolean{
if(!(s1.transform.matrix && s2.transform.matrix && s1.parent === s2.parent)){
return false;
}
var rect1:Rectangle = s1.getBounds(this);
var rect2:Rectangle = s2.getBounds(this);
if(rect1.intersects(rect2)){
var bm1:BitmapData = new BitmapData(
rect1.width, rect1.height, true, 0x00000000
);
var bm2:BitmapData = new BitmapData(
rect2.width, rect2.height, true, 0x00000000
);
var m:Matrix = null;
m = s1.transform.matrix.clone();
m.translate(-rect1.x, -rect1.y);
bm1.draw(s1, m);
m = s2.transform.matrix.clone();
m.translate(-rect2.x, -rect2.y);
bm2.draw(s2, m);
var maxAlpha:uint = 0x01; // чувствительность к прозрачности
return bm1.hitTest(
rect1.topLeft, maxAlpha, bm2, rect2.topLeft, maxAlpha
);
}
return false;
}