china.com
主页
新闻
体育
游戏
文化
教育
健康
财经
科技
旅游
军事
娱乐
商贸
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  

第九课 超炫的鼠标跟随


利用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区

    OK,迫不及待了吧,好,按下Ctrl+Enter,呵呵,是不是很酷,把这个特效做到你的网页里去吧。现在,我们要进入下一课的学习了——Random随机函数

 

  摘自《你的网》 孤独过客/文

 


科技检索


中华网推荐

  • 1000名医生在线咨询

  • 中国足球队官方网站

  • 鸦片玫瑰(新版)

  • 精选股票天地

  • 闪光的flash教程

  • 中华网汽车世界

  • 为你的爱情出谋划策

  • 网文精选——野百合集

  • 世界文化遗产在中国

  • 历届香港小姐风姿集




  • 网络教室编辑信箱
    版权声明 | 本站检索 | 联系方法 | 刊登广告 | 使用说明 | 关于中华网 | 豁免条款

    版权所有 中华网