当前位置:软件学习 > Flash >>

ActionScript教程(55)--控制时间轴

  在创建交互动画时,你可以使用Flash提供的动作或方法来控制时间轴。可以使用某些动作(Actions)和MovieClip对象的方法(Methods)指向一个电影剪辑或载入某层级的动画,或对它们执行一些任务。例如,setProperty动作可以设置时间轴的某种属性(如_width)为某个值(如100),某些MovieClip对象的方法可以复制指向时间轴的所有动作的功能,还有一些完成其它任务的方法,如hitTest(碰撞测试)和swapDepths(交换深度)等等。不管你使用动作还是方法,当动作或方法被调用时,目标时间轴必须已经载入Flash播放器中。

  关于方法与动作

  使用方法来控制时间轴,采用的是点语法。你可以通过指定指向实例名的目标路径,接着是一个点,然后指定方法名和参数的方式来调用一种方法。 如下面的语句:
myMovieClip.play();parentClip.childClip.gotoAndPlay(3);
  在第一个语句中,play方法使实例myMovieClip播放。在第二个语句中,gotoAndPlay方法把childClip(实例parentClip的一个子剪辑) 电影剪辑的播放头移到第3帧播放。
  使用动作控制时间轴,要用一个Target(目标)参数来指定目标路径。例如,在下面的脚本中,startDrag动作指向 customCursor 实例,使它可以拖动。
on(press){ startDrag("customCursor");}
  如果改用方法,则可以写成:
customCursor.startDrag();
  使用MovieClip对象的方法书写的语句更为简短,因为它们不需要tellTarget动作。tellTarget动作与ECMA-262规范不兼容,所以不鼓励使用。
  例如,使用MovieClip对象的方法指令电影剪辑myMovieClip开始播放,你可以使用下面的代码:
myMovieClip.play();
如果使用tellTarget动作,就要这样书写:
tellTarget ("myMovieClip") { play();}
  两种方法的效果相同,但前者更为简洁。
这里所列的动作可以指向电影剪辑:loadMovie、unloadMovie、setProperty、 startDrag、 duplicateMovieClip和removeMovieClip。要使用这些动作,你必须在动作的Target(目标)参数中输入目标路径,指明动作的受体。在这些动作中,有些可以指向电影剪辑或层级,有些则只能指向电影剪辑。
  下面的MovieClip对象的方法可以控制电影剪辑或载入某层级的动画,且没有等价的动作:attachMovie、getBounds、 getBytesLoaded、getBytesTotal、globalToLocal、localToGlobal、 hitTest和swapDepths。
当一种动作和一种方法均能提供同样的功能时,你可以选择其中一种来控制电影剪辑,这取决于你的喜好和使用ActionScript编写脚本的熟悉程度。

  使用多种方法或动作指向时间轴


  使用多种方法或动作指向时间轴

  你可以使用with 动作对目标电影剪辑编址一次,然后对该剪辑执行一系列动作。 with动作对所有ActionScript对象(如Array、Color和Sound)有效,而不是仅仅对电影剪辑有效。tellTarget动作类似于 with动作。 然而,最好不要使用tellTarget动作,因为它并非对所有的ActionScript对象有效,且与ECMA-262不兼容。
with动作使用对象作为参数。指定的对象被添加到当前目标路径的末尾。嵌套在 with动作内的所有动作在新的目标路径或范围内执行。例如,在下列主时间轴的脚本中, with动作传递对象donut.hole,以改变hole的属性:
with (donut.hole){ _alpha = 20; _xscale = 150; _yscale = 150;}
  就好像从hole实例的时间轴中调用with动作内的语句一样。
  在下面的例子中,使用with动作和MovieClip对象的方法来发布几个指令:
with (myMovieClip) { _x -= 10; _y += 10; gotoAndPlay(3);}

  分配动作或方法

  分配动作或方法

  可以把动作和方法分配给按钮、时间轴中的帧或电影剪辑实例。
要把动作和方法分配给电影剪辑实例,必须使用onClipEvent事件处理程序。所有分配给实例的动作都嵌套在onClipEvent事件处理程序之中,并在它被触发后执行。时间轴事件(如装载动画事件)或用户事件(如单击鼠标或按键)均可触发onClipEvent动作。 例如,每当用户移动鼠标时,onClipEvent(mouseMove) 均触发一个动作。

  在上图中,onClipEvent动作被分配给编辑区中的一个实例,onClipEvent的事件列于动作面板的参数嵌板中,包括:Load(装载)、EnterFrame(进入帧)、Unload(卸载)、Mousedown(按下鼠标按键)、Mouseup(释放鼠标按键)、Mousemove(移动鼠标)、 Keydown(按下按键)、Keyup(释放按键)、Data(读取数据)。
 
  装载和卸载另外的动画

  装载和卸载另外的动画

  你可以使用loadMovie 动作或方法,在不关闭Flash播放器的情况下播放另外的动画,或在不载入另外的HTML页面的情况下切换动画。也可以使用loadMovie动作发送变量给CGI脚本。此脚本生成一个SWF文件,作为它的CGI输出。当装载动画时,你可以指定一个层级或电影剪辑,作为载入动画的目标。
  unloadMovie动作和方法删除以前用loadMovie动作装载的动画。用unloadMovie动作明确地卸载动画,能够确保动画之间的平稳过渡,减少Flash播放器对内存的需求。使用loadMovie 动作可以执行以下操作:
在每个SWF文件的后面,使用loadMovie动作载入下一个动画,可以播放SWF文件形式的条幅广告序列。
开发一个分支界面,让用户可以在几个不同的SWF文件中作出选择。
创建一个导航界面,导航控制位于0级,它可以把动画载入其它层级。在浏览器中,载入层级比载入新的HTML页面的过渡更为平滑。


  改变电影剪辑位置和外观


  改变电影剪辑位置和外观

  要在播放时改变电影剪辑的属性,你可以使用setProperty动作或写一个赋值给属性的语句。如果你载入一个动画,被载入的动画继承目标电影剪辑的属性。动画被载入后就可以改变它的属性。
有些属性的值只能读不能设置,称为只读属性。你可以编写语句设置非只读属性的值。下面的语句设置电影剪辑实例wheel(car实例的子剪辑)的_alpha属性:
car.wheel._alpha = 50;
  此外,你可以编写读取电影剪辑属性值的语句。例如,下面的语句读取主时间轴的_xmouse属性的值,并把所读取的值设为customCursor实例_x属性的值:
onClipEvent(enterFrame){ customCursor._x = _root._xmouse;}
  也可以使用getProperty函数检索电影剪辑的属性。
_x、 _y、 _rotation、 _xscale、 _yscale、_height、 _width、_alpha和 _visible属性受本电影剪辑之父电影剪辑变形的影响,并使本电影剪辑及其子电影剪辑也变形。_focusrect、_highquality、_quality和 _soundbuftime属性是全局属性,它们仅属于0级时间轴。所有其它属性属于每个电影剪辑或载入层级。下表列出了所有的电影剪辑属性。
属性
_alpha
_highquality
_totalframes
_xscale
_currentframe
_name
_url
_y
_droptarget
_quality
_visible
_ymouse
_focusrect
_rotation
_width
_yscale
_framesloaded
_soundbuftime
_x

_height
_target
_xmouse



  拖曳电影剪辑

  拖曳电影剪辑

  你可以使用startDrag 动作或方法使电影剪辑在播放时可以拖曳。
电影剪辑保持可拖曳,直至使用stopDrag动作明确地停止拖曳,或直至使用startDrag动作指向了另一个电影剪辑。某个时刻只能有一个电影剪辑可拖曳。
  要创建更复杂的拖放行为,你可以计算被拖放的电影剪辑的_droptarget属性。例如,你可以检查_droptarget属性,看看是否该电影剪辑被拖向指定的电影
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,