Flash中常用交互效果的实现
作者:沈 莉
来源:《中国信息技术教育》2008年第11
        Flash软件以采用矢量图形、支持流媒体播放技术、生成的作品文件小而形象生动得到了大家更广泛的认可,在网络上进行传输更是具有无可比拟的优越性。下面结合教学实践,谈谈如何在Flash中实现Authorware里常用的按钮、热区、热对象、下拉菜单、目标区响应五种交互方式。
       
        ● 按钮交互
       
        Flash中普通按钮、单选按钮等不同形式的按钮,可以通过以下操作来实现。
        1.创建按钮元件。除使用公用库中的按钮素材外,可在Flash中单击插入/新建元件,选
择按钮类型进入编辑状态,如图1,在弹起状态中设置按钮的外观并添加相关文字,在指针经过和按下状态中设置关键帧并分别制作按钮的不同外观,完成一个基本按钮的制作。利用库元件的复制功能略加修改可生成系列按钮。有时为了让按钮外观做得更炫,可将这些关键帧中的对象先做成影片剪辑元件再引用。而点击帧是指按钮的响应区域,默认是弹起帧中的响应范围,在制作纯文字按钮时会用到。
       
        2.为按钮加上Action命令。要使按钮产生交互作用,必须在它上面加上跳转命令goto,跳转的位置可以是一个新的场景或当前场景的不同位置,最后在按钮所在的关键帧和跳转的目标关键帧上分别加上stop()语句。
        3.特殊按钮的制作。对于单选按钮、多选按钮,可利用组件提供的RadioButtonCheckBox实现。
        ● 热区交互
        热区交互是课件运行时在界面上存在的一个矩形响应区域,用户点击该区域可产生响应,
通常在该区域的下面都有实物图片存在。在Flash中,要借助按钮元件实现热区域的设置,利用点击帧的功能(在动画运行时不可见,仅定义鼠标的响应区域),可制作隐形按钮,实现Authorware中的热区交互效果。
        ● 热对象交互
        热对象响应与热区域相似,用户点击的对象既可以是规则的矩形等图案,也可以是不规则的图形。在Flash中也要通过按钮元件来实现,可将按钮元件的前面三帧改成一个实实在在的物体作为交互的对象,其余同按钮交互的使用。
        ● 下拉菜单
        下拉菜单是视窗操作系统中最常见的交互方式,用Flash制作下拉菜单首先要利用按钮元件准备菜单条,包括主菜单和子菜单(如包含三个子菜单),然后在图层1里从库里面引用已准备好的主菜单按钮元件,新增图层2,在第2关键帧中引入子菜单各个元件,按要求排列整齐,在第567关键帧中分别制作三个子菜单所对应的显示页面,最后,在图2时间轴面板中所示的关键帧上添加stop()命令,主菜单的按钮上添加命令on (release) {gotoAndStop
(2);},对第2关键帧的子菜单按钮分别添加gotoAndStop(5)gotoAndStop(6)gotoAndStop(7)命令。
        如果要做多组菜单,可借鉴以上方法在主菜单层添加多个主菜单项,新增其他图层分别放置不同的子菜单项和跳转的画面内容。由于Action使用的灵活性,我们还可以制作其他类型的菜单形式,如弹出式菜单、飞行菜单、隐含菜单等。
        ● 目标区响应
        目标区响应必须指定操作对象和对象移动的目标位置,运行程序时,当用户将操作对象移动到正确的目标位置,系统会执行相应的操作,反之,如果目标位置错误,则对象返回到原位置并执行相应的操作。
        Flash中实现目标区响应比较复杂,首先要用到以下三条命令。
        a.影片剪辑拖放命令
        格式:startdrag(target,[lock[,left,top,right,bottom]])
        target:要拖动的影片名称。
        lock:是否使被拖动对象的中心锁定在鼠标位置,truefalse
        其余参数:指定拖动的范围。
        b.停止拖动
        格式:stopdrag()
        c.检测碰撞指令
        用于检测影片剪辑实例之间或影片剪辑与指定点之间的碰撞。
        格式:(1)anymovieclip.hittest(target)
        (2)anymovieclip.hittest(x,y,shapeflag)
        anymovieclip:需要检测与目标影片剪辑实例或指定点是否碰撞的影片剪辑实例。
        target:要检测碰撞的目标影片剪辑实例。
        x,y:需要检测碰撞的目标点。
        shapeflag:确定影片剪辑实例与目标的碰撞检测方式,该值是逻辑值。取true时,检测指定影片剪辑实例的形状所确定的区域与目标的碰撞;取false时,检测影片剪辑实例的形状所占据的矩形区域与目标的碰撞。该参数只有在检测影片剪辑与点的碰撞时才能设置,检测的是两个影片剪辑所占据的矩形区域之间的碰撞。
        其次,在Flash中要实现拖放一个对象,通常使用鼠标按下(on)和松开(release)事件,并且按钮元件的实例能够接受这些事件。但是,如果要对对象进行拖放控制和目标位置的检测等,该对象就必须是影片剪辑的类型,所以,要实现对一个对象的拖放和控制,该对象必须既是按钮的实例,又是影片剪辑的实例,是二者的结合。
        下面以将信送到邮箱里动画片断来演示Flash中的目标区交互是如何实现的。动画要求是任意拖动一个数学算式到答案信箱,根据结果判断正确就放入对应信箱,错误则返回原来位置,全部操作正确给出鼓励性提示。动画界面见图3。动画的实现过程可参考以下步骤。
        1.将数学算式制作成能够表现出按钮特性的影片剪辑元件。(1)选择插入/新建元件/按钮,分别命名制作五个算式。(2)选择插入/新建元件/影片剪辑,分别将(1)中的算式按钮引入并命名。
        2.制作动画的主场景界面。(1) 新建图层1,制作静态文本请把信放在邮箱里checkbox和radiobutton的区别(2)新建图层2,制作动态文本,变量名为info,对动画的拖放结果进行提示。(3)新建图层3,制作信箱并转为影片剪辑元件,分别命名为da5da6(4)新建图层4,从库中将五个算式影片剪辑元件引入场景,分别定义影片剪辑实例名称为t1t2t3t4t5
        3.Flash目标区交互中Action命令的控制。如算式1的设计为:双击算式1影片剪辑实例,在其中的按钮上右击加载如下Action命令。
        on (press) {
        startDrag("_root.t1");//鼠标按下,允许拖动算式1
        x = _root.t1._x;
        y = _root.t1._y;//xy变量中保留该算式的位置值
        }
        on (release) {
        stopDrag();//鼠标松开,停止拖动
        if (_root.t1.hitTest(_root.da6)) {
        _root.t1._visible = false;//若算式放入了对应信箱,则隐藏该算式
        } else {
        _root.t1._x = x;
        _root.t1._y = y;//若算式没有放入对应信箱,则返回原位
        }
        if (_root.t1._visible == false and _root.t2._visible == false and _root.t3._visible ==false and _root.t4._visible == false and _root.t5._visible == false) {
        _root.info = "恭喜你,全部答对!";
        } //如果所有的算式都放入对应信箱,则给出鼓励性提示
        }