AS3基础教程-第28课-按钮切换画面小程序(下)

2025-12-11 12:36:33

1、上节课讲过,4个按钮的单击操作完全类似,可以使用更加简单的手段来书写代码。请大家看一下原代码,4个按钮的单击操作分别放在了4个响应函数内。

这4个响应函数分别名为

fl_MouseClickHandler()

fl_MouseClickHandler_2()

fl_MouseClickHandler_3()

fl_MouseClickHandler_4()

2、我们现在的目的是,使用一个响应函数,实现四种操作。直接给出修改后的全部代码如下:

stop()

shouye_btn.addEventListener(MouseEvent.CLICK, danji);

tupian_btn.addEventListener(MouseEvent.CLICK, danji);

ruanjian_btn.addEventListener(MouseEvent.CLICK, danji);

guanyu_btn.addEventListener(MouseEvent.CLICK, danji);

function danji(event:MouseEvent):void

{

switch(event.target.name){

case "shouye_btn":

gotoAndStop(1)

break

case "tupian_btn":

gotoAndStop(2)

break

case "ruanjian_btn":

gotoAndStop(3)

break

case "guanyu_btn":

gotoAndStop(4)

break

}

}

3、如下图所示,使用一个switch分支判断,就可以将 原本是 4块的 响应函数,用一个响应函数实现。

充当switch判断的条件是event.target.name

这是本节课的第一个知识点:

event就是响应函数的参数,参数是啥,这里就必须是啥

event.target的意思是 当前被单击的对象

event.target.name的意思是 当前被单击对象的 实例名,乃是String类型的变量,故此,后面的case分支紧跟的都必须用引号给引起来

AS3基础教程-第28课-按钮切换画面小程序(下)

1、我们发现,上面的代码仍显麻烦,其实,还有更加简易的写法。

我们将上面刚改完的28.fla文件再复制一份,重命名为28_pro.fla,然后打开该文件,继续修改

2、这一次,我们会将代码写的很抽象,好处是,代码很简洁,且明白了原理后,阅读起来会感觉思路也清晰。我先给出完整的代码

3、stop()

var names:Array=[shouye_btn,tupian_btn,ruanjian_btn,guanyu_btn]

for(var i:uint=0;i<4;i++){

names[i].addEventListener(MouseEvent.CLICK,danji);

}

function danji(evt:MouseEvent):void

{

gotoAndStop(names.indexOf(evt.target)+1)

}

AS3基础教程-第28课-按钮切换画面小程序(下)

4、现在将代码分段进行说明:

var names:Array=[shouye_btn,tupian_btn,ruanjian_btn,guanyu_btn]

定义一个 数组,存储的是4个按钮的实例名,而且是按照舞台上4个按钮的顺序存放在数组内部的。注意一个细节:数组内的元素,都没有带引号。说明,数组内的所有的元素代表的都是舞台上的对象,并不是对象的实例名。

5、for(var i:uint=0;i<4;i++){

names[i].addEventListener(MouseEvent.CLICK,danji);

}

使用一个for循环,由前面章节我给大家总结的公式:

for(A;B;C){

D

}

可知,A和B的共同作用,就是限定了这个循环的次数是4次。每一次循环只给一个按钮添加单击命令。4次循环完毕后,舞台上的4个按钮都添加了同一个相应函数为danji()的单击按钮命令

6、function danji(evt:MouseEvent):void{

gotoAndStop(names.indexOf(evt.target)+1)

}

书写相应函数的内容。

<1>注意,本例中,我将响应函数的参数设置为了evt

这个是任意设置的,但需保证凡是用到该参数的地方,都保持一致。

<2>evt.target的返回值就是当前被单击的对象,由于后面没有紧跟.name,故此,这里不是返回被单击对象的实例名哦

<3>使用了数组的indexOf(元素)方法,该方法的返回值是 元素 在数组内的索引值。因为数组的索引值都是从0开始的,但是我们时间轴是从1开始的,所以,需要在names.indexOf(evt.target)后面+1才可以跳转到相应的帧

1、本节课的两个代码方案,对应的界面一模一样,仅仅是修改了代码而已。

但是,受限于下面的设计:

代码直接写在了fla文件的时间轴上

导致了,每修改为一段新的代码,就必须将fla文件复制一份,然后再重新修改代码

2、因为本例的界面超级简单,即使是将fla复制多份,也不会影响到什么。

但是,如果某个作品的界面超级复杂,fla文件内嵌了很多图片和声音,导致了fla文件的体积也很大。

再按照本文的手法来操作的话,将会浪费很多硬盘空间。

3、所以,将代码和界面完全分离,就成了一个亟待解决的问题。

令人欣慰的是,AS3从本质上就支持这个效果。

4、AS3使用了一种被称为“文档类”的设计,可以完美的将代码和界面彻底分离。这部分内容将在本系列教程的末尾介绍,敬请期待。

AS3基础教程-第28课-按钮切换画面小程序(下)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢