——交互类型
相关源程序可以到我的网站“资源”类下载http://www.caispace.com
我们知道,Authorware有十一种交互类型,可Flash呢?Flash虽然没有为我们提供现成的交互类型,但她有强大的ActionScript脚本语言,只要你能想到的交互类型,Flash都能做出来!不信?跟我来,让我们用Flash模仿Authorware的交互吧!
Flash中可以写脚本的地方有三个:关键帧上,按钮上和MC上。我们的交互类型也要紧紧围绕这三个因素来设计。
一、按钮交互、热区交互、热对象交互、按键交互
这是课件制作中最常用的几种交互类型了。我将这它们归为一类,它们的特点是:要用到按钮,脚本写在按钮上,实现起来比较容易。
⒈按钮交互的实现
按钮是Flash中的标准剪辑,它有四个特殊的帧,分别代替按钮的不同状态,“点击”帧是用来控制按钮的可点击范围的,一般不用设置。(如图6)
(图6)
制作好按钮后,选中它,打开“动作”面板,如图2写上脚本即可。按钮有八种事件(如图7),我们经常用的是“按”(press)事件和“释放”(release)事件。它们的区别在于“按”事件是当鼠标左键按下执行,而“释放”事件是在鼠标左键按下后再释放时执行。如果按错了,只要不再按钮上释放鼠标(比如可以在按钮外释放),事件是不会执行的。所以,如果不是有特殊的要求,我们应该用“释放”事件。
(图7)
由于Flash是基于时间轴的,所以我们不必像Authorware那样设置“擦除”,如果你想“擦除”这个分支,只需要跳转到另一个关键帧就可以了。
⒉热区交互的实现
制作一个“透明”按钮,将“透明”按钮覆盖在需要交互的区域就可以了。“透明”按钮的制作方法:先用绘图工具绘制一个封闭的形状,然后转换成按钮,再进入这个按钮中将“弹起”关键帧拖动到“点击”帧即可。(如图8、图9)
(图8) 
(图9)
这样的按钮虽然没有实际的形象,但是却有一个发生响应的区域。在编辑时可以看到,但输出影片后就看不到了。Authorware中的热区只能是矩形,而Flash中的热区可以是任意形状哟!(如图10)
(图10)
⒊热对象交互的实现
很简单,将需要响应的热对象转换成按钮。在Flash MX中,按钮也可以拥有自己的实例名,这意味着我们可以像影片剪辑一样对它的各种属性进行更改。如_alpha、_xscale、_visible……。更令人叫绝的是按钮的enabled属性,我们通过将它的值设为真或假就可以禁用或者重新使用这个按钮。方便吧。
⒋按键交互的实现
①使用按钮实现:
如图11,为按钮选择“按键”事件,然后再右边的输入框中按下一个键即可。
注意:同时只能按一个键。如图11中是f键,但并不包括F键。也就是说如果按下F,这个按钮是不会响应的。
(图11)
②使用MC实现:
在Flash中,并非只有按钮才能引发事件。实际上,当涉及到比较复杂的操作时,许多事件都是由MC引起的。下图(图12)列举了MC的9种事件。
(图12)
如上图,向下键(keyDown)事件在键盘上某一键按下时被激活;向上键(keyUp)事件在键盘上某一键按下后抬起时被激活。利用这两个事件,我们可以制作按键交互。首先建立一个空的MC,然后将这个MC拖入舞台,选中这个MC,打开动作面板。写入如下代码(仍以调用“fangfa2“分支为例):
onClipEvent(keyDown){
if(Key.isDown(70)){
_parent.gotoAndStop(“fangfa2”);
}
}
这里的“70”代表的是一个按键,而不是一个字母,因此我们不用考虑大小写的问题,不论是“f”还是“F”,代码都是“70”。为什么要加上_parent呢?因为写在MC上的脚本实际上是位于MC内部的,必须一个表示父时间轴得_parent。
③单纯使用脚本实现:
在Flash MX中新增了KEY对象的侦听器,如果你觉得制作一个空MC太麻烦,那么完全可以创建一个侦听器对象,让它来代替MC接收键盘被按下或者抬起的事件。以下的代码写在主时间轴第一帧:
myKey = new Object();
Key.addListener(myKey);
myKey.onKeyDown = function() {
if (Key.isDown(70)) {
gotoAndStop("fangfa2");
}
};
⒌“等待交互”的实现
虽然Authorware中并没有这种说法,但是我们却经常在使用。当需要制作一些简单交互时,在Authorware中最常用的方法就是拖动一个等待图标到流程线上,然后设置为等待点击、等待按键或者等待一段时间。在Flash中,也可以实现相应的功能。
①等待点击按钮
此法同“按钮交互”,在此不再赘述。
②等待点击鼠标
等待单击
可实现的方法有很多,可以用前面的“透明按钮”的方法,将透明按钮放置在舞台的最上层(这样可以确保舞台上的其他对象不被响应),改变按钮的大小,使其覆盖整个舞台。然后在“透明按钮”上放置跳转到下一步的脚本。
等待双击
将一个“透明按钮”放在一个MC的第一帧,然后在第三帧新建一个关键帧,并将帧的长度延长至第四帧。
第一帧的脚本如下:
stop();
第一帧按钮上的脚本如下:
on(press){
play();
}
第三帧按钮上的脚本如下:
on(press){
_parent.gotoAndStop(“fangfa2”)
}
完成后的MC时间轴如图13所示。
(图13)
然后将这个MC拖动到舞台上,并至于最上层,改变其大小,使其覆盖整个舞台即可。如果需要改变双击的速度,只需延长第三帧后面的普通帧就可以了。
③等待按任意键
在主时间轴第一帧写入如下脚本:
myKey = new Object();
Key.addListener(myKey);
myKey.onKeyDown = function() {
gotoAndStop(“fangfa2”);
};
二、目标区交互
目标区交互常用来制作拼图游戏或者分类练习。在Flash中我们一般用hitTest、startDrag和stopDrag函数来实现。下面就用一个自然课件的实例“分一分”来讲解Flash目标区交互的实现方法。同时也巩固一下上面讲到的知识。
由于Flash MX开始支持MC的按钮事件,如果使用Flash MX的编程方法来写这篇教程,制作上会简化许多。但考虑到许多老师现在还在使用Flash 5开发课件,因此本文中使用到的编程方法均基于Flash 5。但是,本例中的某些功能必须在Flash MX的环境下才能实现,这在下文中会有提及。
下面具体分析这个课件的功能。课件提供了三个练习,本别是“按形状分”、“按颜色分”和“按运动方式分”。学生用鼠标拖动不同的物体进行分类,如果分类正确,则放置在正确的位置,并且禁止再次拖动这个物体;如果拖动错误,那么就将这个物体放回原处。由于三个练习实现方式基本相同,本文仅介绍第一个练习的实现方法。(课件界面和主时间线如图14、15)
(图14)
(图15)
⒈设计课件结构
①在主时间线中新建4个层,由上至下分别命名为“脚本”、“外框”、“按钮”、“主要”。
②在“脚本”和“主要”层的第10帧、第20帧和第30帧各插入一个关键帧,并为“脚本”层的四个关键帧分别命名为“start”、“shape”、“colour”和“mode”,在这四个关键帧上都加入stop();脚本。(如图15)
③新建一个按钮,在其中绘制一个矩形。然后从库中拖动三个按钮元件至“按钮”层中,排列到舞台左边。在三个按钮上方分别输入“按形状分”、“按颜色分”和“按运动方式分”(注意:没有必要制作三个不同的按钮元件,舞台上的按钮是库中按钮的“分身”,每个分身可以设置不同的脚本)。这三个按钮上的脚本分别如下:
“按形状分”按钮:
on(release){
gotoAndStop(“shape”);
}
“按颜色分”按钮:
on(release){
gotoAndStop(“colour”);
}
“按运动方式分”按钮:
on(release){
gotoAndStop(“mode”);
}
④制作外框、课题,放置在“外框”层中。
⒉作限制框
①建一个名为“k”的影片剪辑,并在其中绘制一个无边框的矩形。
②从库中拖动三个“k”的分身到舞台上,排列好后为他们分别命名为“k_circle”,“k_rectangle”和“k_triangle”。
③分别绘制一个圆形、一个矩形和一个三角形,将他们放在相应的框上方。(如图16)
(图16)
⒊作可拖动的MC
①择“主要”层的第10帧(即“shape”帧),绘制一个黑色无边框的圆形。
②将其转换为按钮,命名为“circle”,确定定位点在圆形的中心。
③将这个按钮转换为影片剪辑,并命名为“circle_mc”。
④双击这个影片剪辑进入其内部,选择圆形按钮,打开“动作”面板并输入以下脚本:
on (press) {
startDrag("", true);
}
on (release, releaseOutside) {
stopDrag();
}
将这段脚本“翻译”成中文就是:
当按下鼠标时
开始拖动本影片剪辑
当释放或者外部释放鼠标时
停止拖动
⑤现在测试一下影片,可以看到圆形可以被拖动到任意的位置。但我们需要的不仅仅是这些。我们现在要圆形影片剪辑是否被拖动到了圆形分类框中,如果是,则放置在原地;如果否,则放回原处。
⑥要将圆形影片剪辑放回原处,必须得知圆形影片剪辑最原始的位置。可以很容易的在“信息”面板中知道它的位置是x:183.5,y:212.5,但这并不是一种聪明的方法。在这里,我们使用变量来记住圆形影片剪辑的位置。将下面的脚本放在startDrag脚本上面:
oldX=_x;
oldY=_y;
由于当前的圆形按钮处于圆形剪辑的内部,所以无需为_x和_y属性指定目标,默认既是当前的影片剪辑。这也是startDrag命令为什么没有目标的原因。
⑦要实现判断的功能,我们使用函数hitTese。这个函数能够判断两个影片剪辑是否重合,如果重合则返回true。我们先来看看这个当前这个例子的“中文”脚本:
如果圆形影片剪辑没有和圆形分类框重合,那么将圆形影片剪辑放回原处。
注意到这里的条件是“没有重合”,我们很容易判断圆形影片剪辑是否与圆形分类框重合,如果需要“没有重合”这个条件,我们需要加上一个“!”(非)运算符。将下面的脚本放置在stopDrag下面,也就是一停止拖动马上执行:
if (!hitTest(_parent.k_circle)) {
_x = oldX;
_y = oldY;
}
⑧现在测试一下影片,可以看到当拖动圆形影片剪辑到除圆形分类框的其他位置是,圆形影片剪辑会自动放回原处。但又出现了一个问题,因为圆形影片剪辑是随时可以拖动的,如果现在使用者试图再次拖动圆形影片剪辑,则圆形影片剪辑仍会放回前一次拖动的目的地。
要解决这个问题,我们需要禁止圆形影片剪辑再次被拖动。最简单的方法就是禁用按钮。Flash MX将按钮也列为标准对象,并为其加入了enlabled属性,通过将enlabled的值设为真或假,可以启用或禁用按钮。要使用这个属性,我们需要先为按钮的分身命名。
在舞台上选择圆形按钮分身,将其命名为“b”。(如图17)
(图17)
⑨实现禁用按钮的“中文”脚本应为:
如果圆形影片剪辑和圆形分类框重合,那么禁用按钮,否则就启用按钮。
最先想到的应该是用if…else…语句实现这个功能,但没有必要,应该尽量减少代码。本例中已经有了一个if条件语句。我们只要利用现有的就可以了。按钮“b”上的脚本全部完成后如下:
on (press) {
oldX = _x;
oldY = _y;
startDrag("", true);
}
on (release, releaseOutside) {
stopDrag();
b.enabled = 0;
if (!hitTest(_parent.k_circle)) {
_x = oldX;
_y = oldY;
b.enabled = 1;
}
}
解释一下关于禁用按钮的语句。当停止拖动时将按钮“b”的enlabled属性设为0,禁用按钮。这时如果圆形影片剪辑的位置处于圆形分类框中,接下来的if代码块不会执行。圆形影片剪辑不能再被拖动。但如果当前的圆形影片剪辑和圆形分类框不重合,则会执行if中的代码,圆形影片剪辑被放置回原处,按钮“b”又被设为可用。
⒋完善程序
①同样的方法制作矩形按钮并转换成影片剪辑,分别命名为“rectangle”和“rectangle_mc”。用同样的方法制作三角形按钮并转换成影片剪辑,分别命名为“triangle”和“triangle_mc”。(注意,上面的命名指的是元件在库中的名称,并不是指元件在舞台上的分身名。)
②矩形影片剪辑和三角形影片剪辑中的按钮分身均命名为“b”。
③两个按钮上的脚本几乎完全相同,需要改动的只是hitTest函数的对象。
矩形按钮上的脚本为:
on (press) {
oldX = _x;
oldY = _y;
startDrag("", true);
}
on (release, releaseOutside) {
stopDrag();
b.enabled = 0;
if (!hitTest(_parent.k_rectangle)) {
_x = oldX;
_y = oldY;
b.enabled = 1;
}
}
三角形按钮上的脚本为:
on (press) {
oldX = _x;
oldY = _y;
startDrag("", true);
}
on (release, releaseOutside) {
stopDrag();
b.enabled = 0;
if (!hitTest(_parent.k_rectangle)) {
_x = oldX;
_y = oldY;
b.enabled = 1;
}
}
④此时舞台上已经有圆形、矩形和三角形影片剪辑各一个了。再从库中各拖动一个到舞台上,分别改变他们的位置、色彩、大小和角度,测试影片,观看效果。(如图18)
(图18)
⒌完成课件
课件的第一个部分“按形状分”已经完成,另外两个部分“按颜色分”和“按运动方式分”的制作大同小异,在此不再赘述。
相关源程序可以到我的网站“资源”类下载,http://www.caispace.com
三、下拉菜单交互
下拉菜单交互适于制作逻辑性较强,分类较细的课件,和Authorware中呆板的系统菜单不一样,我们可以充分发挥自己的想象力,创造出与众不同的下拉菜单!下面以一个实例来讲解下拉菜单交互的制作方法。
⒈分析菜单
先来看看菜单的样子:(如图19)
(图19)
这里制作的两级菜单模仿了Windows菜单的风格。当单击“主菜单”按钮时,弹出第一级菜单,将鼠标移动到一级菜单的某个按钮上,则弹出相应的二级菜单。单击二级菜单中的某项进入课件的相应部分。
下面分析一下菜单的制作方法。虽然可以用场景跳转来做,但考虑到场景跳转不够灵活,而且不能放到MC中,因此用帧跳转更好。用层来区别不同级别的菜单,用帧来区别同一级别的菜单。图20展示了菜单(不是课件)的时间轴。
(图20)
⒉菜单结构
①新建一个MC,命名为“下拉菜单”。以下的操作都在这个MC中进行。
②除已有的“图层1”外,再新建三个图层,由下至上分别命名为“主菜单”,“一级菜单”,“二级菜单”,“脚本”。
③选中所有层的第50帧,插入普通帧。在“脚本”层每隔10帧加入一个关键帧,直到第40帧。将这5个关键帧的标签分别命名为“main”、“first”、“second_1”、“second_2”、“second_3”。在“二级菜单”层的“second_1”、“second_2”和“second_3”标签对应位置插入关键帧。在“一级菜单”层的“first”帧标签对应位置插入关键帧。
④新建一个按钮剪辑,并将其从库中拖动到“主菜单”层的第一帧。在按钮上方写上文字“主菜单”。同样的,将三个按钮剪辑的分身拖动到“一级菜单”层的第10帧,在按钮上方写上相应的文字。最后,在“二级菜单”层的第20帧、第30帧和第40帧分别安置相应的按钮并写上相应的文字。(如图19)
⑤调整按钮和文字的位置,使其形成如图19所示的父菜单和子菜单的排列。为了使菜单便于辨认,二级菜单的位置应该在相应的一级菜单按钮旁边。
⒊加入脚本
①在“脚本”层的所有关键帧都加入stop();命令。
②在“主菜单”按钮上加入如下脚本:
on (press) {
if (pressDone) {
gotoAndStop("first");
pressDone = 0;
} else {
gotoAndStop("main");
pressDone = 1;
}
}
为了只用一个按钮控制菜单的弹出和消失,我使用了自定义变量pressDone。当pressDone值为1时跳转到“first”帧(也就是弹出一级菜单),同时将pressDone的值设为0,否则就跳回“main”帧,并将pressDone的值设为1。要这个脚本正常工作,还需要初始化pressDone变量。我们可以把这条脚本加入“mian”帧:
pressDone = 1;
③一级菜单按钮上的脚本
在“活动研讨”按钮上加入如下脚本:
on(rollOver,dragOver){
gotoAndStop("second_1");
}
另外两个一级菜单按钮上的脚本和此脚本相似,只是将gotoAndStop()函数的目标帧分别改为“second_2”和“second_3”。
④在二级菜单的所有按钮上加入以下脚本:
on(press){
gotoAndStop("main");
}
这个脚本确保当单击二级菜单按钮时返回主菜单状态。现在可以测试一下我们的下拉菜单了,是不是工作得很出色?^_^当然,这个菜单是不能做任何事的,我们还需要给它加上控制课件跳转的语句。请先参阅前面“课件的结构“章中讲到的几种跳转方式设计好主时间轴的结构,然后在二级菜单的按钮上加入跳转命令就可以了。如:在二级菜单的“验证”按钮上的最终脚本为:
on(press){
gotoAndStop("main");
parent.gotoAndStop(“part2_2”);
}
图21为此课件的主时间轴,
(图21)
课件源程序请到http://caispace.126.com下载。
四、文本输入交互
文本输入交互经常用在填空题中。下面以一个数学“十以内的加法”来讲解文本输入交互的制作方法。
⒈课件分析
图22为本课件运行界面
(图22)
如图。点击“出题”按钮Flash自动出题,在等号后的文本框中输入答案。点击“计算”按钮可以计算答案是否正确,并在题目上方给出相应的提示信息。
根据分析,我们可以使用两个按钮负责出题和计算,使用三个动态文本域分别显示两个加数和提示信息,使用一个输入文本域输入和。
⒉课件结构
本课件的主时间轴如图23所示。
(图23)
课件结构很简单,只有一帧。以下的操作全部在“主要”层的第一帧完成。
①加入三个动态文本域,取消“可选”状态,设置字体、字号、颜色等信息,并将它们的变量分别设为“a”、“b”和“info”(没有引号)。(如图24)
(图24)
②加入一个输入文本域,设置其字体、字号、颜色等信息,并选中“在文本周围显示边框”。由于10以内数之和最大是两位数,我们也不希望在输入框中输入数字以外的其他字符,所以将“最多字符”项设为2,并单击“字符”按钮,弹出“字符选项”对话框,设为“仅——数字”。最后将它的变量设为“c”(没有引号),
(图25)
③加入两个按钮“出题”、“计算”和加号、等号,并将舞台上的所有元素按适当的形式排列。(如图26)
(图26)
⒊加入脚本
①在按钮“出题”上加入以下脚本:
on (press) {
//设置两个加数为10以内的随机数
a = random(10);
b = random(10);
//清空文本域c和文本域info
c="";
info="";
}
②在按钮“计算”上加入以下脚本:
on (press, keyPress "<Enter>") {
//如果答案正确则将info文本框的提示信息设为“你真聪明!”,否则设为“再好好想想”。
if (c == a+b) {
info = "你真聪明!";
} else {
info = "再好好想想";
}
}
课件至此制作完成。实际上,文本输入交互是通过对输入文本域中的变量进行检查和判断来实现交互的,少不了用到if……else……语句。此例仅提供了制作文本输入交互的一个方向,可以通过举一反三,制作出更复杂的文本输入交互来。此课件的源文件可以到http://caispace.126.com下载。
五、重试限制交互
下面我们用“重试限制交互”制作一个选择题的例子。课件界面如图27所示:
(图27)
⒈课件分析
既然是限制,就必然存在一个限制的条件。我们可以用一个变量来存储选择的次数,每次选择将变量加一,当选择次数等于3次时给出警告,并跳转到下一题或触发其他事件。
⒉课件结构
课件主时间轴如图28所示。课件中有两道选择题,如果第一题选择正确,课件会继续显示第二题;如果错误选择超过三次,也同样会自动显示第二题。
(图28)
①新建影片,在影片中插入三个新图层,将所有四个图层按图28命名,将所有图层延长到第10帧。
②在“主要”层的第一帧输入选择题的题目和选择项(如图27)。
③在“按钮”层制作一个“透明”按钮(透明按钮的制作方法请参阅前文),复制四个分身,并将它们分别覆盖到答案选项上方。(如图29)
(图29)
④在“背景”层加入一个动态文本域,将这个动态文本域命名为“info_txt”,变量名不需要,设置字体、颜色等信息。(如图30)
(图30)
我们将使用这个动态文本域显示相关信息。但是,我们要采取与“文本输入交互”例子中不同的方法来控制文本域的显示。在文本交互中,我们使用变量来控制动态文本域中文本的内容,在本例中,我们使用动态文本域的text属性来控制其内容。这种方法只能在Flash MX下使用。
⒊加入脚本
①将“脚本”层的第一帧命名为“text1”,并在其中加入stop()命令。
②在选项A(正确的选项)上方的按钮中加入以下脚本:
on (release) {
//设置info_txt的text属性
info_txt.text="答对了!"
//继续下一题
play();
}
为什么此处用play()而不用gotoAndStop()呢?因为如果使用gotoAndStop(),程序会直接跳转到下一题,info_txt中的信息就来不及显示了。
③在选项B、C和D(错误的选项)上方的按钮中加入以下脚本:
on (release) {
//尝试的次数加1
++tries;
info_txt.text = "不对!";
//如果尝试次数等于3则继续下一题
if (tries == 3) {
info_txt.text = "对不起,你已经选择了三次。";
play();
}
}
④在“按钮”层的第二帧插入一个空白关键帧。这是为了避免从“test1”开始play()后,四个按钮还可以被选择。当然,也可以给按钮命名后利用其enabled属性禁用按钮。
⑤用同样的方法制作“test2”部分。(如图28)“text2”部分的正确选项可能与“test1”不同,只需调换按钮的顺序即可。另外,由于动态文本域“info_txt”位于“背景”层,在“test1”和“test2”部分都能够被调用,所以有必要在“脚本”层的“test2”帧加入脚本 info_txt.text="" 以清空信息文本框。
至此课件制作完成,通过前面的例子可以发现,Flash中的交互大多都是用条件语句if……else……加上跳转语句实现的。在接下来的“时间限制”交互中,我们将尝试用几种不同的方法实现交互。此课件的源文件可以到http://caispace.126.com下载。
六、时间限制交互
我们还是在“重试限制交互”的例子上继续制作。
⒈课件分析
我们知道,在Flash课件中,控制时间轴也就是控制了课件的运行。本例中,我们需要一个条件来自动控制时间轴的运行。实现这个条件在Flash中有许多方法,我们在这里讲解常用的几种方法。
⒉使用MC来实现时间限制交互
①新建一个MC,命名为timeLimit,在此MC的第48帧处插入一个关键帧,在此关键帧上写入以下脚本:
_parent.play();
②将timeLimit拖动到“背景”层中,并将其命名为timeLimit_mc。由于这个MC中除了空白帧和脚本外没有其他内容,所以在舞台上显示为一个空白的圆点。将其放置在舞台外的某个自己容易找到的角落。(如图31所示)
(图31)
应该遵循一个这样的习惯,每次都将空白MC放在相同的位置,这样便于自己查找。如果感觉空的MC不容易选中,也可以在MC中加入一个小的矩形之类的图案,因为MC放在舞台外,不会影响课件的显示。
③由于在timeLimit中设定的是48帧,默认帧频是12帧/秒,所以如果没有进行任何选择,大约在4秒左右程序会自动跳转到第二题(48÷12=4)。为什么说是“大约”呢?因为Flash对计算机资源的要求比较高,当计算机配置较低或者动画比较复杂时,Flash的实际帧频的往往会比默认帧频要低,也就是达不到默认的速度,这时的48帧当然就要比4秒长。
④在“test2”帧加入如下脚本:
timeLimit_mc.gotoAndPlay(1);
此脚本确保在进入“test2”帧时重新开始计算时间。
此种方法制作时间限制比较简单。但缺点也很明显,就是对时间的显示不够精确,更改起来也比较麻烦。下面将介绍两种使用脚本实现的时间限制交互。仍旧在“重试限制交互”的例子上进行制作。
⒊使用setInterval()实现时间限制交互
①在“脚本”层的“test1”帧加入如下脚本:
//自定义一个函数timeLimit
function timeLimit() {
play();
}
//每4000毫秒(4秒)执行一次timeLimit()函数
pauseID=setInterval(timeLimit, 4000);
pauseID是一个自定义变量,它存储setInterval()函数的ID值,以便利用clearInterval()清除对timeLimit()的调用。
②程序会每隔4秒执行一次timeLimit()函数,反映在课件上就是我们的选择题每隔4秒会自动前进到下一题。
③在“脚本”层的“test2”帧加入以下脚本:
clearInterval(pauseID);
此脚本停止setInterval()函数的运行。由于本例仅有2题,所以将此脚本写在“test2”帧,如果有6题,就应该将此脚本写在“脚本”层的“test6”帧上。
④另外,timeLimit()函数也可以这样定义:
function timeLimit() {
++i;
gotoAndPlay(“test” + i );
}
当然,要这个函数能够工作,必须将每一题的关键帧按照“test”+序号的方法命名。
此种方法是最简便的一种方法,推荐使用。但是setInterval()函数和clearInterval()函数是Flash MX中才出现的,因此这种方法不支持Flash 5。下面介绍的一种方法运用了getTimer()函数,在Flash MX和Flash 5中都可以使用。
⒋使用getTimer()函数实现时间限制交互
①首先新建一个空MC,命名为timeLimit。此MC中不放入任何内容。
②新建一层,将其命名为“限制”,将timeLimit放置到这层中。
③选中这个MC,在脚本窗口写入如下脚本:
onClipEvent (enterFrame) {
//如果当前时间减去旧时间的值大于4000毫秒(4秒)就继续播放
if (getTimer()-_parent.oldTime>4000) {
_parent.play();
}
}
④在每个选择题的关键帧都加入如下脚本:
oldTime = getTimer();
⑤在“限制”层的“test2”帧插入一个空白关键帧,以取消时间限制。如果本例有6道选择题,则应在“限制”层的“test6”帧插入这个空白关键帧。(如图32 为帮助理解,图例中共6道选择题)
(图32)
此方法虽不及第二种方法灵活,但更易懂,在Flash 5下也可以使用。
此课件的源程序可以到http://caispace.126.com下载。
七、其他交互
⒈条件交互
实际上,我们做过的重试限制和时间限制交互都是条件交互。在这两个交互中,我们通过对一个条件的判断来进行不同类型的限制。Flash中的条件交互更灵活,可以实现的功能也更多。但前提是必须自己去创造这个条件。其实,只要运用好if…else…等语句,再配合变量的使用,就能做出更复杂的、甚至是Authorware中没有的交互来。
⒉事件交互
这可是Flash望尘莫及的事情了。Flash中无法调用Active控件,和Windows系统通信的方法也少的可怜,虽然可以用fscommand()函数与浏览器进行一些通讯,或者借助其他网络编程语言实现与系统的通信,但始终不可能像Authorware那样可以随时调用Windows中控件。不过别忘了,Authorware和Flash就结合得很好!没有一个软件是全能的,Flash做不了的,用Authorware来做!只有取长补短,熟悉各种工具,才能制作出更完美的作品。