动态改变注册点

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

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;

 

 

转载于:https://www.cnblogs.com/holybozo/archive/2008/10/25/1319148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值