AS3.0 实例学习 熟悉AS3的package,以及多个package之间的相互通信_Flash教程-查字典教程网
AS3.0 实例学习 熟悉AS3的package,以及多个package之间的相互通信
AS3.0 实例学习 熟悉AS3的package,以及多个package之间的相互通信
发布时间:2016-12-28 来源:查字典编辑
摘要:熟悉AS3的package,以及多个package之间的相互通信说明:一个很简单的demo,有4个按钮,当鼠标划过和移开时会呈现出不同的状态...

熟悉AS3的package,以及多个package之间的相互通信

说明:一个很简单的demo,有4个按钮,当鼠标划过和移开时会呈现出不同的状态,单击后变成disabled,再点击其他的按钮时,之前disabled的按钮恢复,被点击的按钮失效。

演示:http://www.live-my-life-with-yuyi.com/as3_cases/communicating/

准备工作:打开源文件communicating_final.fla,点击属性里的发布设置,点击Actionscript3旁边的设置,在最下面的classpath里,引入classes的文件夹的路径,然后点击确定,前期工作就准备完了。

代码:

源文件里的代码很简单:

复制代码 代码如下:

importtodd.interactive.ButtonSet;

varbuttons:ButtonSet=newButtonSet();

buttons.addButtons([one_mc,two_mc,three_mc,four_mc]);

addChild(buttons);

导入ButtonSet类,实例化,然后调用里面的一个方法,最后将它放到舞台上。

classes文件夹下面的todd->interactive文件夹里有两个as文件,其中一个就是刚刚调用的ButtonSet,来看看ButtonSet的源码:

复制代码 代码如下:

packagetodd.interactive

{

//其实只需载入display和events就可以了,不过多载入几个并不影响文件大小和效率

importflash.display.*;

importflash.events.*;

importflash.filters.*;

importflash.net.*;

importflash.geom.*;

importflash.ui.*;

importflash.utils.*;

importfl.transitions.*;

importfl.transitions.easing.*;

publicclassButtonSetextendsMovieClip

{

publicvarbuttons:Array;

publicfunctionButtonSet()

{

}

publicfunctionaddButtons(buttonSet:Array):void

{

buttons=buttonSet;

for(vari:int=0;i<buttons.length;i++)

{

addChild(buttons[i]);

}

}

}

}

一个类应该被放在一个package里面,就像钱应该被放到钱包里一样。package后面定义的是该类的路径。然后一系列常用的类。

定义了一个全局变量buttons,在变量前面加一个public就可以了。这样就能在整个类中被访问到。

类名应该和文件名一样(区分大小写),然后定义一个同名函数,这个函数会在类被初始化时调用,就像php4的类一样。这里只是搭了个架子,没有具体内容。

然后定义了一个函数addButtons,它的作用就是将一些mc或者sprites放到自己的container里(addChild)。

还有一个类:DisablingButton,也是位于todd->interactive文件夹下,这也是这个案例的核心。对了,之前已经将RectButton的linkage里的baseClass设置为todd.interactive.DisablingButton。

代码稍微有点长,且听我细细道来

复制代码 代码如下:

packagetodd.interactive{

importflash.display.*;

importflash.events.*;

importtodd.interactive.ButtonSet;

publicclassDisablingButtonextendsMovieClip{

varlabels:Array;

varthisParent:*;

varthisIndex:int;

publicfunctionDisablingButton(){

labels=this.currentLabels;

this.addEventListener(MouseEvent.CLICK,disableButton);

this.addEventListener(MouseEvent.ROLL_OVER,over);

this.addEventListener(MouseEvent.ROLL_OUT,out);

this.addEventListener(Event.ADDED,setParent);

}

functiondisableButton(event:MouseEvent):void{

for(vari:int=0;i<labels.length;i++){

if(labels[i].name=="disable"){

this.gotoAndPlay("disable");

}

}

this.removeEventListener(MouseEvent.CLICK,disableButton);

this.removeEventListener(MouseEvent.ROLL_OVER,over);

this.removeEventListener(MouseEvent.ROLL_OUT,out);

enableOthers();

}

functionenableButton():void{

this.addEventListener(MouseEvent.CLICK,disableButton);

this.addEventListener(MouseEvent.ROLL_OVER,over);

this.addEventListener(MouseEvent.ROLL_OUT,out);

this.gotoAndStop(1);

}

functionover(event:MouseEvent):void{

for(varj:int=0;j<labels.length;j++){

if(labels[j].name=="over"){

this.gotoAndPlay("over");

}

}

}

functionout(event:MouseEvent):void{

for(vark:int=0;k<labels.length;k++){

if(labels[k].name=="out"){

this.gotoAndPlay("out");

}

}

}

functionsetParent(event:Event):void{

if(this.parentisButtonSet){

thisParent=this.parent;

for(varw:int=0;w<thisParent.buttons.length;w++){

if(this==thisParent.buttons[w]){

thisIndex=w;

}

}

}

}

functionenableOthers():void{

for(varz:int=0;z<thisParent.buttons.length;z++){

if(z!=thisIndex){

thisParent.buttons[z].enableButton();

}

}

}

}

}

载入了两个常用类后,又载入了刚刚定义的ButtonSet类,这样我们就能使用ButtonSet的一些方法了。

注意:这个类必须继承Movieclip类,因为该类的对象是一个mc。

然后定义了一些全局变量(默认均为public)。

创建析构函数DisablingButton,labels=this.currentLabels;这句话的意思是取得当前mc的label属性,以array的形式返回,包含了label.frame,label.name等等的属性。

然后监听自己的鼠标点击、移入、移出事件。

this.addEventListener(Event.ADDED,setParent);这句话的意思是当自己被添加进一个容器时调用setParent函数。

disableButton这个函数作用是,将当前mc的状态变成disabled,然后取消监听事件,同时激活其他的按钮。

enableButton函数的作用就是激活自己的监听事件,并初始化自己的状态。

over和out函数很简单,就是设置自己当前的状态。

setParent函数的最终目的是捕获点击事件发生在哪个mc上(gotoAndPlay方法将触发EVENT.ADDED,所以over和out函数都将触发setParent函数,这也是一个待改进的地方)。

enableOthers函数顾名思义,激活其他的按钮。因为setParent已经记住了,最后的点击事件发生在哪个mc上,所以只要遍历一下buttons,然后激活其他的mc就可以了。

案例分析完毕。

打包文件

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Flash教程学习
    热门Flash教程学习
    网页设计子分类