个人认为这个类存在错误,这些错误又集中出现在最后一个方法getDrawMatrix()里,因此把源码copy下来直接注释:
protected static functiongetDrawMatrix( target:DisplayObject, hitRectangle:Rectangle,accurracy:Number ):Matrix
{
var localToGlobal:Point;;
var matrix:Matrix;
var rootConcatenatedMatrix:Matrix =target.root.transform.concatenatedMatrix;
//虽然下面这句隐含错误,但很喜欢它的妙处。这句让我来写,肯定是
//localToGlobal =target.parent.localToGlobal( new Point( target.x,target.y));
localToGlobal = target.localToGlobal( new Point( ) );
matrix = target.transform.concatenatedMatrix;
//整个类是以root为标准参考坐标系的,下面的localToGloba显然使用stage坐标系,
//hitRectangle使用root坐标系,当root相对stage原点没有偏移时,这个错误体现不出来,
//只需在文档类加一句"this.root.x+=50;",就会发现碰撞检测的结果不准确。
matrix.tx = localToGlobal.x - hitRectangle.x;
matrix.ty = localToGlobal.y - hitRectangle.y;
//下面两句的目的是,将target的concatenatedMatrix剔除掉root缩放变换的影响,以
//此得到target相对于root的记录矩阵。但直接设置a,d值来实现scale功能是危险的,
// 当matrix的b,c值不为0(即发生旋转变换时),这个操作并不等效与scale操作.
// 很多人都反应他们测试旋转的对象依然准确,为什么呢?因为rootConcatenatedMatrix的