通过实例学习Flash AS3.0——案例五 程序员文章站 2023-10-17 19:21:06 相关文章: 通过实例学习Flash AS3.0——案例四 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不... 08-10-06... 相关文章: 通过实例学习flash as3.0——案例四首先声明:本人大菜鸟一个,刚接触as3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知识。 水平有限,错误难免,欢迎大虾小虾,大鸟小鸟指正。 下面进入正题:案例5:熟悉as3的package,以及多个package之间的相互通信说明:一个很简单的demo,有4个按钮,当鼠标划过和移开时会呈现出不同的状态,单击后变成disabled,再点击其他的按钮时,之前disabled的按钮恢复,被点击的按钮失效。演示:http://www.live-my-life-with-yuyi.com/as3_cases/communicating/准备工作:打开源文件communicating_final.fla,点击属性里的发布设置,点击actionscript3旁边的设置,在最下面的classpath里,引入classes的文件夹的路径,然后点击确定,前期工作就准备完了。代码: 源文件里的代码很简单: import todd.interactive.buttonset;var buttons:buttonset = new buttonset();buttons.addbuttons([one_mc,two_mc,three_mc,four_mc]);addchild(buttons); 导入buttonset类,实例化,然后调用里面的一个方法,最后将它放到舞台上。 classes文件夹下面的todd->interactive文件夹里有两个as文件,其中一个就是刚刚调用的buttonset,来看看buttonset的源码: package todd.interactive{ //其实只需载入display和events就可以了,不过多载入几个并不影响文件大小和效率 import flash.display.*; import flash.events.*; import flash.filters.*; import flash.net.*; import flash.geom.*; import flash.ui.*; import flash.utils.*; import fl.transitions.*; import fl.transitions.easing.*; public class buttonset extends movieclip { public var buttons:array; public function buttonset() { } public function addbuttons(buttonset:array):void { buttons = buttonset; for(var i: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。 代码稍微有点长,且听我细细道来 package todd.interactive{ import flash.display.*; import flash.events.*; import todd.interactive.buttonset; public class disablingbutton extends movieclip { var labels:array; var thisparent:*; var thisindex:int; public function disablingbutton() { 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); } function disablebutton(event:mouseevent):void { for (var i: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(); } function enablebutton():void { this.addeventlistener(mouseevent.click, disablebutton); this.addeventlistener(mouseevent.roll_over, over); this.addeventlistener(mouseevent.roll_out, out); this.gotoandstop(1); } function over(event:mouseevent):void { for (var j:int = 0; j < labels.length; j ) { if (labels[j].name == "over") { this.gotoandplay("over"); } } } function out(event:mouseevent):void { for (var k:int = 0; k < labels.length; k ) { if (labels[k].name == "out") { this.gotoandplay("out"); } } } function setparent(event:event):void { if (this.parent is buttonset) { thisparent=this.parent; for (var w:int=0; w < thisparent.buttons.length; w ) { if (this == thisparent.buttons[w]) { thisindex=w; } } } } function enableothers():void { for (var z: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就可以了。 案例分析完毕。 上一篇: 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算) 下一篇: javascript闭包操作 推荐阅读 通过实例学习Flash AS3.0——案例四 通过实例学习Flash AS3.0——案例五 通过实例学习flash AS3.0——案例二 通过实例学习Flash AS3.0——案例六 通过实例学习AS3.0 通过实例学习flash AS3.0——案例二 通过实例学习Flash AS3.0——案例六 通过实例学习AS3.0 通过实例学习Flash AS3.0——案例五 通过实例学习AS3.0——案例三