主题:  鼠标跟随

Blackflash.Qi

职务:版主
等级:7
金币:17.0
发贴:6028
#12001/2/18 14:14:24
利用FLASH的Action编程还可以做出各种超炫的效果,鼠标跟随就是其中较为普通也是效果最酷的一种。学好了比较基础的鼠标跟随,其它的更酷的也大同小异,只需想一下就能做出了。新建一个工作区,在菜单里  选择Libraries -> Movie Clips。系统会弹出一个MC库的窗口(这是系统提供的一些素材),在这个窗口里选择一个名为Star Spinning的Movie Clip,然后把它拖到场景(Scene)中Layer1层的第一帧。接着,在场景中选中这个星形,然后把它转换成一个名为mouse的MovieClip(Insert -> Convert to Symbol -> Movie Clip)。这样,名为mouse的MC包含了一个名为Star Spinning的MC,虽然现在看上去好像没有必要,但是,这却给你以后把这个普通的鼠标跟随特效修改成更酷更炫的鼠标跟随效果提供了方便。在这一步的最后,给这个名为mouse的MC取一个实体名(Modify -> Instance -> Instance name),MC的实体名被命名成mouse。
新建一个名位Program的MC(Insert -> New Symbol -> Movie Clip)。没错,我们现在要编程了。这个名为Program的MC一共只有三个空帧,但每一个空帧的Action里都有一段程序。第一个空帧的Action中的程序的作用是初始化各种变量和常量,只在开始播放动画时执行一次。第二和第三帧的Action是基本相同的,它们的作用是判断鼠标的移动并画出跟随的重影,这两帧是一个回路,在动画播放时反复不停地执行。下面我们就来仔细看看每一帧的Action。
帧号 Action 的 内 容 解 释
1 Set Variable: "ox" = GetProperty("/mouse",_x)
Set Variable: "oy" = GetProperty("/mouse",_y)
Set Variable: "const" = 34
Set Variable: "step2" = -3
Set Variable: "step" = 3
Set Variable: "i" = const 第一第二行是获取鼠标X,Y坐标,赋给变量ox、oy以便后面判断鼠标是否移动;const是一个常量,其值为鼠标后面重影的个数;step2的值是重影变小(大)的速度,负数变小,正数变大,绝对值越大,速度越快;step为重影透明度变化的速度,数值越大,变化越快;i是在后面程序中用到的一个变量。
2 If ((GetProperty("/mouse",_x) <> ox) or (GetProperty("/mouse",_y) <> oy))
If (i=0)
Set Variable: "i" = const
End If
Duplicate Movie Clip ("/mouse", "mouse"&i, i)
Set Variable: "i" = i-1
Set Variable: "ox" = GetProperty("/mouse",_x)
Set Variable: "oy" = GetProperty("/mouse",_y)
End If
Set Variable: "n" = const
Loop While (n>0)
Set Property ("/mouse"&n, Alpha) = GetProperty("/mouse"&n,_alpha)-step
Set Property ("/mouse"&n, X Scale) = GetProperty("/mouse"&n,_xscale)+step2
Set Property ("/mouse"&n, Y Scale) = GetProperty("/mouse"&n,_yscale)+step2
Set Variable: "n" = n-1
End Loop 第一层判断(If)是判断鼠标是否移动,如果移动则执行,没有移动则跳过。在这层If语句中还判断了i是否等于0,如果i减少到了0,则重新把const的值赋给i。接下来的Duplicate Movie Clip是把实体mouse复制到实体mousei(i是1到const之间的一个数),接着i自减一,并把当前鼠标坐标值重新赋给ox和oy,以便下次判断。在判断外的代码,是每次都必须执行的。首先,先把const的值赋给n,然后做一循环(n从const到1),循环体中是减小实体mousen(n由循环决定)的Alpha值和改变实体mousen的大小。
3 If ((GetProperty("/mouse",_x) <> ox) or (GetProperty("/mouse",_y) <> oy))
If (i=0)
Set Variable: "i" = const
End If
Duplicate Movie Clip ("/mouse", "mouse"&i, i)
Set Variable: "i" = i-1
Set Variable: "ox" = GetProperty("/mouse",_x)
Set Variable: "oy" = GetProperty("/mouse",_y)
End If
Set Variable: "n" = const
Loop While (n>0)
Set Property ("/mouse"&n, Alpha) = GetProperty("/mouse"&n,_alpha)-step
Set Property ("/mouse"&n, X Scale) = GetProperty("/mouse"&n,_xscale)+step2
Set Property ("/mouse"&n, Y Scale) = GetProperty("/mouse"&n,_yscale)+step2
Set Variable: "n" = n-1
End Loop
Go to and Play (2) 这一帧的Action和第二帧的几乎是一模一样,只是在最后多了一句Go to and Play (2)。这样做的原因是为了构成一个循环回路(构成一个回路最少要有两帧),反复执行第二第三帧的程序。
注意:在编写这些程序的时候,要注意不要把数值型(Expression)变量的值赋成字符串型(Literal String)的值。
终于把最困难的程序部分解决了,下面就是最后的收尾工作了。回到编辑场景状态,新建一层Layer2,按下Ctrl+L,打开符号库,把Program MC拖放到Layer2层的第一帧。最后,把Layer1层的第一帧的Action设为:
Start Drag ("/mouse", lockcenter)
Stop

Start Drag是让实体mouse随着鼠标移动而移动,别忘了在Lock Mouse to Center上打个勾,让实体mouse的中心始终定位在鼠标的热点(Hot dot)。Scene中Layer1层第一帧的Action
别忘了在Lock Mouse to Center上打个勾
场景的层区和Timeline区
MC Program的层区和Timeline区

按下Ctrl+Enter



舞桀

职务:普通成员
等级:2
金币:10.0
发贴:561
#22001/2/18 17:16:03
哇!鼠标跟随还贴啊!



Blackflash.Qi

职务:版主
等级:7
金币:17.0
发贴:6028
#32001/2/18 21:08:15
老兄呀,你是高手,可是还有很多向我这么的菜鸟不会呀,我的目的是想让大家都成为高手呀



舞桀

职务:普通成员
等级:2
金币:10.0
发贴:561
#42001/2/18 21:33:10
我也菜!



Blackflash.Qi

职务:版主
等级:7
金币:17.0
发贴:6028
#52001/2/18 21:39:23
那让我们这些小菜一起学吧



舞桀

职务:普通成员
等级:2
金币:10.0
发贴:561
#62001/2/18 22:54:19
还请斑竹咄咄关照!

欢迎到闪客堡来
http://www.flashcastle.com/