第六章,实现对影片的控制
影片的播放是有一定的顺序的,当然这样的顺序并不是不以改变的,在Action指令中的中有很多的指令是控制和获取帧的,在Frame帧面板上,还可以为帧加上标签,哪么,在今后控制帧播放顺序的时候也会很方便。在Flash动画制作方面,通过帧控制来实现交互也是一种常见的方法。当然帧控制的方法有很多种,一个章节不可以全部介绍。所以用一种比较通用的办法来了解帧控制行为是很有必要的。请看图6-1,在这个图的下边有一排按钮,这些按钮实现的功能想必一目了然了吧。哪么,就跟我一起开始下面的实例。(此例源程序光盘范例\ch6\6-1.fla)

图6-1 影片控制按钮的界面
6.1 播放和停止键
在开始制作控制键之前,有必要对将要涉及的指令做一个全面的了解。打开Flash5的Action面板。在Basic Actions指令集中你可以观察到有几个关于帧控制方面的指令。

图6-2 Action中的帧控制指令
◆ Gotoandplay在所有指令中被安排在第一位。也就是Action面板中Basic Actions中的第一个指令,可见它的重要性了。在goto指令上双击后,在程序编辑区,你会出现gotoandplay(1)命令行了。当此命令出现时参数输入区,共有两个下拉框,和个输入框,和一个单选框。 ● Scene下拉框表示选择场景,在其中会用所有的场景列表。 ● Type下拉框中共有几个选项。Frame Number表示使用帧序列号表达所要跳转的帧。Frame Label表示用帧标签来表达所要跳转的帧,当然你必须在Frame帧面板中为帧加上标签。Expression表示用表达式来表达所要跳转的帧。Next Frame表示跳转到下一帧。Previous Frame表示跳转到上一帧。

图6-3 goto指令的Type下拉框
● Frame输入框中可以根据Type下拉框的选择输入所要跳转的帧。 ● 单选框gotoandplay选取时会以gotoandplay跳转并播放来加入代码,取消选取状态程序会变为gotoandstop。 ◆ gotoandstop的意思很简单,跳转到指定帧并且停止播放。 ◆ play的意思是开始播放。 ◆ stop的意思是在当前位置停止播放。 ◆ nextframe的意思是跳转到下一帧。 ◆ prevframe的意思是跳转到上一帧。 所有这些指令构成了帧跳转的基本使用方法。每一个指令都不复杂。但是合理的应用才是关键。有时候我们惊叹于国外网站眩目的动画效果,但他们基本上并不使用多么复杂的编程,只是使用帧跳转和按钮就作到了很多的事情。所以学习Action脚本编程是为我们的动画效果服务的,而编程本身并不是目的。 开始制作播放按钮和停止按钮。如图6-4所示。

图6-4 播放、暂停和停止键
步骤一、选择Window|Common Library|Bottons命令,打开Flash的共享库面板,你可以看到很多的按钮样式,其中大部份都是播放控制键,可见Macromedia公司对播放键的重视程度,你可以选择任何一款按钮,倒了不必与笔者相同。

图6-5 Common Library共享库面板
步骤二、在你制作好的动画源程序上新建一个图层,你会看到系统会把帧自动加入到你的动画的总长度。在第一帧位置上,将这三个按钮拖入。用Align对齐面板调整好它们的位置。

图6-6 系统默认插入帧会自动加入动画的总长度
步骤三、你可以观察到系统会把按钮的位置贯穿于动画的始末。如图6-7。

图6-7 贯穿始末的帧
步骤四、当然如果你不喜欢这样的方式,你可以在时间轴上再进行操作,但是现在,我们希望这个按钮会在动画的整个过程中都体现,所以就使用系统的默认设置。 步骤五、在代表播放的按键上点击鼠标右键,选择Action,打开按钮的Action行为面板。 步骤六、点击Basic Actions指令集中的play指令,可以看出在程序的编辑区拥有了一两行指令 On(release){ play() ) 播放按钮制作完成。

图6-8 播放按钮的代码
步骤七、现在再来制作暂停按钮。在按钮上点击鼠标右键选择Action,在打开的Action面板中选择stop(),暂停按钮制作完成。

图6-9 暂停按钮的代码
步骤八、再来制作停止按钮的代码行。停止按钮其实是停止在片首的按钮。哪么在停止按钮上击鼠标右键选择Action,打开Action面板后选择goto指令,然后取消gotoandplay单选框的选取状态。代码如图6-10所示。

图6-10 停止按钮的代码
步骤九、整个按钮的代码并不复杂,操作也很简单,然后按Ctrl+Enter键测试。 知识要点: 在这三个按钮的制作过程中,可能会以为这样的控制制作起来很简单。但其实大型网站的建设离不开这三段代码行。很多的效果都是很简单,就像动画本身一样,单一的效果不管有多眩总是不如组合的效果,一个大型网站的建设像这样的代码行少则十几段多则上百段。虽然都很简单,但是整体效果一出来还是会让人瞪目结舌的。
6.2 步进与步退
在步进和步退按钮指令中,你还可以接触到一个属性_currentframe。这是用来返回当前帧的属性。还有一个_totalframes是用来返回动画的总长度的属性,用这两个属性来达到步进和步退按钮的效果,因为用它可以检测到场景或是电影剪辑的当前播放帧。还有总长度,这就足够了。 步骤一、在Window|Common Library|Buttons中选择一个代表步进和步退的按钮。将它们拖入到场景的第一帧,并且用Align对齐面板调整与前三个按钮的位置。 步骤二、在代表步进的按钮上点击鼠标右键,选择Action,打开步进按钮的Action面板。 步骤三、双击Basic Actions指令集中的goto指令。使之出现在程序编辑区。 步骤四、点击Type下拉框,选择Expression表达式选项。这表示我们在Frame框中将要输入的是一个表达式。 步骤五、在Frame框中输入代码_currentframe+1,同时取消对gotoandplay单选框的选取。如图6-11所示。

图6-11 步进按钮的代码
步骤六、在场景的第一帧双击,打开第一帧的Action面板,选择Basic Astions指令集中的stop指令,使动画在加载时停止播放。 步骤七、按Ctrl+Enter键测试。你可以发现,每按一下按钮影片就会前进一帧。 步骤八、然后制作步退按钮的指令,在步退按钮上点鼠标右键,选择Action,打开步退按钮的Action面板。 步骤九、双击Basic Actions指令集的goto指令。选择Type下拉框中的Expression项,然后在Frame栏中输入代码_currentframe-1。 步骤十、取消对Go to and play单选框的选取,使之成为gotoandstop()。然后按Ctrl+Enter键测试。

图6-12 步退按钮的代码
步骤十一、当使用步进按钮后使用步退按钮正好使得动画一帧一帧的后退。当动画回到起始位置后,按钮就失效了。如果我们想让动画可以循环的播放。就好像当动画在第一帧的时候按步退按钮,还可以让动画回到结束位置,执行循环的步退呢?还有步进按钮也是一样,跟我继续制作吧。 步骤十二、鼠标右键点击步退按钮,选择Action重新回到步退按钮的Action面板,选取第一行。 步骤十三、然后双击Actions指令集中的if指令,在Condition中输入代码_currentframe<=1,如图6-13所示。

图6-13 if指令输入框
步骤十四、然后双击Basic Actions指令集中的Goto行,取消Go to and play单选框的选取状态,在Type下拉框中选择Expression项。表示输入一个表达式。 步骤十五、在Frame框内输入表达式_totalframes完成如图6-14所示。

图6-14 步退按钮的完整代码
步骤十六、回到编辑区,鼠标右键点击步进按钮的Action选项,进入步进按钮的Action面板,依然是在第一行上选取,然后在Actions指令集中双击if指令,在参数输入框内输入条件参数为_currentframe>=_totalframes。 步骤十七、然后双击Basic Actions指令集中的Goto指令,取消对Go to and Play单选框的选取,使代码内容成为gotoandstop(1)。 步骤十八、这样做的用意是让程序回到第一帧。整个代码完成如图6-15所示。

图6-15 步进按钮的完整代码
步骤十九、按Ctrl+Enter键测试。 程序解读: 以步进按钮为例第一行:当按钮单击并且松开时发生{}括号内的代码段内容。 第二行:当()括号内的_currentframe>=_totalframes条件发生时,这是一个什么事件呢,当前帧大于等于总帧数的时候,发生if后面{}括号内的内容。我们在点击按钮时,会因为当前帧已经是最后一帧,使得播放当前帧加一的情况发生转变。动画无法再继续播放,所以出现了第三行的内容,告诉动画遇到这种情况的话执行{}括号内的内容。 第三行:跳转到第一帧。第一次点击按钮时,程序都会进行一次判断,判断当前播放的帧是否已经超过了总帧数。如果已经超过,哪么会让时间轴指针回到动画的起始位置。这也就是这个步进按钮的核心内容。 第五行:播放并且停止到当前帧加一的位置。 再来看看步退按钮的代码段内容。 第一行与步进按钮的相同。 第二行当动画的当前帧小于等于1的时候,也就是说当动画回到起始位置的时候,开始第三行内容。 第三行,播放并且停止到动画的最后一帧。 第五行:播放当前帧减一的位置。 知识要点: 整个程序使用了当前帧加一的技术,让goto语句实现对表达式的结果进行播放。在代码当中,可以把+currentframe看做是一个变量,是一个数字,这个数字会返回动画播放的指针,这在大型控制类程序中相当多见,在我们观看动画时,其实只能是去感觉而不是知道动画的实际指针在什么地方。哪么通过_currentframe就可以知道播放指针在具体的什么位置。但_currentframe也有容易出错的地方,比方说,它并不止是提供当前动画的播放指针。而且还可以是电影剪辑的播放指针,所以在使用这项技术的时候请一定注意路径的使用,因为这们制作的这个动画中的按钮是在场景中,所以,_currentframe会返回当前场景的播放指针,但如果是在电影剪辑当中的话,这个程序就会返回电影剪辑的播放指针在什么位置。还有_totalframes总帧数属性,它也是可以返回电影剪辑的总长度,并不只是像上例一样是返回场景的指针。在接下来的例子当中你会了解到关于电影剪辑和场景中跳径使用的区别。
出处:蓝色理想
责任编辑:蓝色
上一页 下一页 FLASH 5 教程 — Flash 影片控制 下
◎进入论坛Flash专栏版块参加讨论
|