position类 by_zszen[将多层缩放旋转后的深层位置释放给_root]
之前有贴过这个类 不过之前只支持移动 ,当多级间有缩放和旋转就无法使用了,编程需要多动脑子灵活思路
付上类
复制内容到剪贴板
代码:
class com_zszen.base.position {
function position() {
}
//直接使用 position.absolute(mc)
static function absolute(mc) {
var x:Number = mc._x;
var y:Number = mc._y;
var ps:MovieClip = mc._parent;
var len:Number;
var angle:Number;
while (ps != null) {
x *= ps._xscale/100;
y *= ps._yscale/100;
len = Math.sqrt(x*x+y*y);
angle = Math.atan2(y, x)+ps._rotation*3.14/180;
x = len*Math.cos(angle);
y = len*Math.sin(angle);
相对角度和相对比率都得到使用
x += ps._x;
y += ps._y;
ps = ps._parent;
}
return ({x:x, y:y});
}
}原理:
如果只有位移
则从mc本身的x,y偏移量一直继承叠加父级mc的x,y偏移量
得到的公式是:
pot:[1代表mc本身,2代表mc的父级,3代表mc的父级的父级...一直到顶级_root[xn]]
x=x1+x2+x3+....+xn
y=y1+y2+y3+....+yn
需要缩放的时候就得到了这样的结果
x=((x1*s2+x2)*s3+x3)...)*sn+xn
y=((y1*s2+x2)*s3+x3)...)*sn+xn
需要角度变化的调整是
len1=开方(x方+y方)
angle2=mc2的角度
得到结果是
x=((len1*cos(angle2)+len2)*cos(angle3))+len3)....)*cos(anglen)
y=((len1*sin(angle2)+len2)*sin(angle3))+len3)....)*sin(anglen)
将上面的综合起来就是简单的position算法,呵呵 看着有点晕巴,习惯了就好了
[
本帖最后由 zszen 于 2007-7-31 12:07 编辑 ]