I saw a tweet from @mesh today, asking about hitTest when one object is rotated. A bit of horrible hackery, and here’s the result. Warning, nasty thrown-together code!
var red:Sprite = new Sprite();
red.graphics.beginFill(0xFF0000);
red.graphics.lineTo(40, 0);
red.graphics.lineTo(40, 150);
red.graphics.lineTo(0,150);
red.graphics.lineTo(0,0);
red.x = 40;
red.y = 40;
addChild(red);
var green:Sprite = new Sprite();
green.graphics.beginFill(0x00FF00);
green.graphics.lineTo(40, 0);
green.graphics.lineTo(40, 150);
green.graphics.lineTo(0,150);
green.graphics.lineTo(0,0);
green.x = 300;
green.y = 40;
addChild(green);
var useRotation:Number=10;
var redBmpData = new BitmapData(red.width, red.height, true, 0);
redBmpData.draw(red);
var useDimension:int = Math.ceil(Math.sqrt((green.width * green.width) + (green.height * green.height)));
var diffWidth:int = useDimension - green.width;
var diffHeight:int = useDimension - green.height;
var newBD:BitmapData = new BitmapData(useDimension,useDimension,true,0);
var angle_in_radians:Number = Math.PI * 2 * (useRotation / 360);
var m:Matrix = new Matrix();
m.translate((green.width / 2) * -1, (green.height / 2) * -1);
m.rotate(angle_in_radians);
m.translate(green.width / 2, green.height / 2);
m.translate(diffWidth / 2, diffHeight / 2);
var translatedPoint:Point = m.transformPoint(new Point(0,0));
trace(useDimension);
var greenBmpData = new BitmapData(useDimension,useDimension,true,0);
greenBmpData.draw(green,m);
/*var sampleGreen:Bitmap =new Bitmap(greenBmpData);
addChild(sampleGreen);
sampleGreen.x=200;
sampleGreen.y=200;
*/
green.rotation=useRotation;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
function onMouseMove(e:MouseEvent):void {
green.x = mouseX;
green.y = mouseY;
if (redBmpData.hitTest(new Point(red.x, red.y),
255,
greenBmpData,
new Point(green.x-translatedPoint.x, green.y-translatedPoint.y),
255
)) {
trace("hit");
red.filters = [new GlowFilter()];
} else {
red.filters = [];
}
}
I’ll blog a better example of this, with comments and an explanation of what it’s doing in the next few days.



@mesh here you go: http://is.gd/1a3Ma – not optimised, nasty code, but it works
This comment was originally posted on Twitter
@mesh here you go: http://is.gd/1a3Ma – not optimised, nasty code, but it works
This comment was originally posted on Twitter