2006/02/16 | 数学函数控制MC旋转——Lab No.2
类别(Flash课件设计) | 评论(1) | 阅读(343) | 发表于 23:00
涉及到AS 动态控制MC 旋转的代码通常都会很麻烦,但偏偏又总是能遇到,为了彻底征服这一主题,我准备在最近的几次实验室分析中把我手头几个典型的MC 旋转效果代码拿出来做一分析。
本次的示例中采用的是先计算出MC 中元件统一的旋转角度,再逐个计算出转动的位移距离,将元件移动到新的位置上去,从而实现整体旋转的效果。


Flash 动画


点击左侧的按钮,实现了增加/删除MC 的功能,右侧的按钮,实现了增加/删除辅助线的功能。两个按钮中都使用了相似的"开关"参数,分别由s2 和s1 来控制,点击一次参数改变一次值,下次点击执行不同的代码段。
拖动MC 中的箭头,指针按线条的顶点旋转;拖动MC 方形的尾,指针按线条另一端旋转;拖动线条,MC 整体移动。
Symbol6 是核心的MC 元件,在它的第一帧中,写入了全部的用于实现旋转的AS代码。首先是变量定义:
initRotation = 0; //线条的初始旋转度数。
lineWidth = 200; //线条的宽度,实际上是线条的长度。
rotaRadius = 50; //旋转半径,用来指定箭头和箭尾的位置。

接下来创建一个空MC,再在其中的不同层上分别加入库中的元件,并设置了相应的初始位置及旋转角度,若线条的初始旋转角度不为零,其它两个部件将会自动生产相应的变化。
this.createEmptyMovieClip("rsgxMc", 1);
rsgxMc.attachMovie("gx_gx", "gLine", 1);
rsgxMc.attachMovie("gx_jd", "Arrow", 2);
rsgxMc.attachMovie("gx_kzb", "Tail", 3);
旋转的动作是通过 onEnterFrame 事件来驱动的,旋转的角度是通过gx_rotation = function (x1, y1, x2, y2) 函数来计算。变量c 为1,表示拖动的是箭尾,变量b 为1,表示拖动的是箭头。
rsgxMc_x,rsgxMc_y 用来记录线条的新位置。
最后再重新计算出箭头和箭尾的新位置,从而完成旋转的动作。
为了确保鼠标操作的正确,分别在 onRelease 和onReleaseOutside 事件函数中对鼠标的动作做出响应。
座标的换算中采用的是基本的数学函数,MC 中元件的_x 和_y 直接表示的就是该元件的注册点位置座标,因此在本例中,只要注册点位于单个元件的中心,旋转角度一致时,所有的元件都会在一条线上排列。关于注册点的测试,请参考我的另一篇文章《注册点和中心点》。
下次分析一个结构更为严谨的动态改变注册点的例子,今天的分析就到这里吧。
0

评论Comments