发新话题
打印

[编程] position类 by_zszen[将多层缩放旋转后的深层位置转化为_root位置]

position类 by_zszen[将多层缩放旋转后的深层位置转化为_root位置]

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 编辑 ]

附件

SpxImage1.jpg (25 KB)

2007-7-31 11:58

截图

SpxImage1.jpg

finalPosition.swf (4.69 KB)

2007-7-31 11:58, 下载次数: 70

效果

position_getpot.zip (14.28 KB)

2007-7-31 11:58, 下载次数: 62

源文件

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

还是用globalToLocal/localToGlobal习惯~
寻觅终生伴侣!

my blog

TOP

发新话题