2006/07/09 | 动态注册点类的使用方法与实例
类别(Flash课件设计) | 评论(1) | 阅读(302) | 发表于 18:00
昨天帮网友做一个课件,突然发现自己不会写旋转的函数了,写了半天的效果还是不大对劲,后来想起来自己有一个动态注册点的例子,拿来应用一下不是很好吗,与是有了下面的短文。
设定动态注册点的方法与应用
  MC 的旋转操作是以注册点为旋转中心的,而MC 只有一个唯一的注册点,因此,当旋转中心不是这个注册点时,就需要计算出注册点的下一个位置,以及MC 在下一位置时的旋转角度,这样的计算通常都是很麻烦的,现在国外的闪客已经提供了一个类,利用这个类可以动态的指定注册点,也就是说动态的指定旋转中心,大大的简化的细节上的运算。现在把这个类的使用方法介绍一下:
  首先,将类文件与你的fla 文件放在相同的目录下,打开fla 文件,在库中找到需要旋转的mc ,点右键选择链接,选择为AS 导出,选择第一帧导出,类名称写入DynamicRegistration ,确定之后,类与mc 已经链接好了。
  该类有一个方法 setRegistration(x,y); 一个属性 _rotation2 ;利用前者指定一个注册点(该点必须使用mc 内部的坐标来表示), _rotation2 用来表示mc 总的旋转角度。
  将mc 内部的位置点通过localToGlobal 函数转换为全局位置后,可以同鼠标进行比较,从而得到总的旋转角,也就是 _rotation2 的值。
  在下面的例子中,点击其中一个球,mc 将以另一个球作为旋转中心,计算角度的函数atan 和atan2 功能是相同的,看个喜好来使用吧。

rota_mc.pt_a_mc.onPress = function() {
  rota_mc.setRegistration(rota_mc.pt_b_mc._x, rota_mc.pt_b_mc._y);
  var pt:Object = new Object();
  onEnterFrame = function () {
    pt.x = rota_mc.pt_b_mc._x;
    pt.y = rota_mc.pt_b_mc._y;
    rota_mc.localToGlobal(pt);
    var angle = atan2_angle(_root._xmouse, _root._ymouse, pt.x, pt.y);
    rota_mc._rotation2 = angle - 180;
  };
};
rota_mc.pt_a_mc.onRelease = function() {
  delete _root.onEnterFrame;
};
rota_mc.pt_a_mc.onReleaseOutside = function() {
  delete _root.onEnterFrame;
};
rota_mc.pt_b_mc.onPress = function() {
  rota_mc.setRegistration(rota_mc.pt_a_mc._x, rota_mc.pt_a_mc._y);
  var pt:Object = new Object();
  onEnterFrame = function () {
    pt.x = rota_mc.pt_a_mc._x;
    pt.y = rota_mc.pt_a_mc._y;
    rota_mc.localToGlobal(pt);
    var angle = atan2_angle(_root._xmouse, _root._ymouse, pt.x, pt.y);
    rota_mc._rotation2 = angle;
  };
};
rota_mc.pt_b_mc.onRelease = function() {
  delete _root.onEnterFrame;
};
rota_mc.pt_b_mc.onReleaseOutside = function() {
  delete _root.onEnterFrame;
};

function atan_angle(x1, y1, x2, y2) {
  // x1,y1: first point
  // x2,y2: center point
  var dx = x1 - x2;
  var dy = y1 - y2;
  var p = Math.atan(dy / dx) * 180 / 3.141593;
  var rota = dx > 0 ? p : (180 + p);
  return rota;
}
function atan2_angle(x1, y1, x2, y2) {
  // x1,y1: first point
  // x2,y2: center point
  var dx = x1 - x2;
  var dy = y1 - y2;
  var p = Math.atan2(dy, dx) * 180 / Math.PI;
  return p;
}

Flash 动画
0

评论Comments