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 动作可以执行以下操作:
改变电影剪辑位置和外观 改变电影剪辑位置和外观 要在播放时改变电影剪辑的属性,你可以使用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级时间轴。所有其它属性属于每个电影剪辑或载入层级。下表列出了所有的电影剪辑属性。
拖曳电影剪辑 拖曳电影剪辑 你可以使用startDrag 动作或方法使电影剪辑在播放时可以拖曳。 电影剪辑保持可拖曳,直至使用stopDrag动作明确地停止拖曳,或直至使用startDrag动作指向了另一个电影剪辑。某个时刻只能有一个电影剪辑可拖曳。 要创建更复杂的拖放行为,你可以计算被拖放的电影剪辑的_droptarget属性。例如,你可以检查_droptarget属性,看看是否该电影剪辑被拖向指定的电影剪辑(如"trash can"电影剪辑),然后触发另一个动作。 复制和删除电影剪辑 你可以在播放动画时,分别使用duplicateMovieClip或removeMovieClip创建或删除电影剪辑实例。 duplicateMovieClip动作和方法动态创建新的电影剪辑实例,赋给它一个新的实例名和路径。 即使复制时原剪辑播放到了其它帧,所复制的电影剪辑总是从第一帧开始播放,并且总是位于本时间轴中预定义电影剪辑的上面。原电影剪辑的变量不拷贝到复制件中。 要删除用duplicateMovieClip创建的电影剪辑,使用removeMovieClip。如果父电影剪辑被删除,复件电影剪辑也被删除。 附加电影剪辑 附加电影剪辑 你可以用attachMovie方法从图符库中检索一个电影剪辑的拷贝,并把它作为你的动画的一部分来播放。本方法可以装载另一个电影剪辑到你的电影剪辑中,并在该动画播放时播放它。 要使用attachMovie 方法,必须在Symbol Linkage Properties(图符连接属性)对话框中给被附加的电影剪辑起一个唯一的名字。 为共享的电影剪辑命名的操作步骤如下:
要把一个电影剪辑附加给另一个电影剪辑,可按如下步骤操作: 要把一个电影剪辑附加给另一个电影剪辑,可按如下步骤操作:
|