动态改变注册点

比较古老的话题,今天再拿出来扯一下。

flash牛人darron schall早在03年就完成了这么一个类:http://www.darronschall.com/weblog/archives/000054.cfm

算法是在形变前后使用两次localToGlobalglobalToLocal,得到给定注册点的位移差,然后改变mc坐标。

当时是flash7 as2刚出,作者只不过是把算法封装成了类,而这种思想可以在flash5时代就能实现的了。

到了flash8有了geom.matrix和geom.transform以后,实现起来就更方便了。前提是要有预备知识(我就是最近才有,所以再回来研究一下-_-||)

所谓的预备知识,就是“向量与矩阵的乘法”
这个说来话长,简单的说,就是把一个向量通过矩阵变换成另一个向量。
而向量就是注册点,矩阵控制形变,变换后的向量也就是在形变后,相应改变的注册点。

其实两个方法的核心是一样的,都是求形变前和形变后的注册点之差,最后把mc的坐标偏移过去就OK。

两种算法的伪码比较

 

 

// --- Flash 5+

var a = {x:this.xreg, y:this.yreg};

this.localToGlobal (a);

this._parent.globalToLocal (a);

// 形变1

// 形变2

// 形变n

var b = {x:this.xreg, y:this.yreg};

this.localToGlobal (b);

this._parent.globalToLocal (b);

this._x -= b.x - a.x;

this._y -= b.y - a.y;



// --- Flash 8+

var m:Matrix = this.transform.matrix;

var px1:Number = this.xreg * m.a + this.yreg * m.c;

var py1:Number = this.xreg * m.b + this.yreg * m.d;

// 形变1

// 形变2

// 形变n

var m:Matrix = this.transform.matrix;

var px2:Number = this.xreg * m.a + this.yreg * m.c;

var py2:Number = this.xreg * m.b + this.yreg * m.d;

this._x -= px2 - px1;

this._y -= py2 - py1;



 

 

你可能感兴趣的:(动态)