您的位置: 首页 > 技术文档 > 多媒体制作 > 通过实例学习AS3.0——案例五
通过实例学习AS3.0——案例六 回到列表 通过实例学习AS3.0——案例四
 通过实例学习AS3.0——案例五

作者:lzyy 时间: 2007-11-26 文档类型:原创 来自:蓝色理想

首先声明:本人大菜鸟一个,刚接触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就可以了。

案例分析完毕。

源文件下载

经典论坛讨论
http://bbs.blueidea.com/thread-2807809-1-1.html

本文链接:http://www.blueidea.com/tech/multimedia/2007/5112.asp 

出处:蓝色理想
责任编辑:tada

◎进入论坛RIA设计与应用版块参加讨论

相关文章 更多相关链接
通过实例学习AS3.0——案例六
通过实例学习AS3.0——案例四
通过实例学习AS3.0——案例三
通过实例学习AS3.0——案例二
通过实例学习AS3.0——案例一
作者文章 更多作者文章
通过实例学习AS3.0——案例六
通过实例学习AS3.0——案例四
通过实例学习AS3.0——案例三
通过实例学习AS3.0——案例二
通过实例学习AS3.0——案例一
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2