11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2289|回复: 3
上一主题 下一主题

[事件机制] 事件练习之二(给事件定义不同的常量作为参数,实现不同类型事件的目的)

[复制链接] TA的其它主题
发表于 2019-1-15 15:59:00 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 雪原xy 于 2019-1-15 16:41 编辑

[Actionscript3] 纯文本查看 复制代码
//文档类:
/*说明:1、在文档类中导入了三个类:“上课事件类”、“教师类”、“学生类”;
     2、教师实例添加了两个侦听器,一个是上课事件,一个上下课事件;侦听器都是学生的study()方法;
         3、最后的te.Cla()方法,由于移除了侦听器,所以只有教师的动作,而学生没有反应;*/
package  {
        
        import flash.display.Sprite;
        import son2.ClaEvent;
        import son2.Students;
        import son2.Techer;
        
        public class doc2 extends Sprite {
                
                var te:Techer=new Techer("赵老师","数学")
                var stu:Students=new Students();
                public function doc2() {
                //为教师添加两个侦听器;
                te.addEventListener(ClaEvent.START_CLASS,stu.study);
                te.addEventListener(ClaEvent.OVER_CLASS,stu.study);
                //使用ClaEvent的静态常量赋值;
                te.Cla(ClaEvent.START_CLASS);
                //移除对上课的侦听;
                te.removeEventListener(ClaEvent.START_CLASS,stu.study);
                //使用ClaEvent的静态常量值赋值;
                te.Cla("下课");
                //移除下课的侦听;
                te.removeEventListener(ClaEvent.OVER_CLASS,stu.study);
                //再次使用te.Cla()方法,编译器没有反应,因为侦听器移除了;
                trace("完")
                te.Cla("上课");

                }
        }
        
                }
        

//自定义的一个事件类,有两个不同的常量作为不同的事件类型;
package son2 {
        import flash.events.Event;
        public class ClaEvent extends Event {
                //定义不同的常量;
    public static const START_CLASS:String="上课";
    public static const OVER_CLASS:String="下课";
        //定义一个学科的属性;
        private var _claSub:String;
        //构造函数根的不同的参数定义不同类型的事件;
                public function ClaEvent(ev:String) {
           super(ev);
                   }
                //给学科写入setter和getter方法;
                public function set claSub(ee:String):void{
                        _claSub=ee;
                        }
                public function get claSub():String{
                        return _claSub;
                        }

        }
        
}

//定义一个教师类;
package son2 {
        //导入一个可以发送事件的类;
        import flash.events.EventDispatcher;
        //教师类必须继承EventDispatcher类,否则无法发送事件;
        public class Techer extends EventDispatcher{
   //给教师类复合一个自定义的事件类,用来发送;
    public var eve:ClaEvent;
        //定义两个属性:一是教师名字,一是学科;
        public var sub:String;
        public var nam:String;
        //在构造函数中给教师和学科赋值;
        public function Techer(na:String,su:String) {
                        nam=na;
                        sub=su;
                }
        //定义一个方法,给用事件赋值并发送事件;
        public function Cla(st:String){
                //用Cla方法为事件赋值并初始化;
                eve=new ClaEvent(st);
                eve.claSub=sub;

                //根据参数的不同选择不同的事件发送出去;
                if(eve.type=="上课"){
                        trace("同学们,上课了!!我是"+nam+",这节课是"+sub+"课!");
                        }
                else if(eve.type=="下课"){
                        trace("下课了!");
                        }
                        trace("(这个事件的类型是:"+eve.type+")");
                        trace("(这个老师所教的科目是:"+eve.claSub+")");
          
          //用下面的方法发送事件;
                  trace(eve.type+"事件已发送!")
             dispatchEvent(eve);

                }
        }
        
}

//定义一个学生类;

package  son2{
        
        public class Students {

                public function Students() {
                        // constructor code
                }
                //给学生添加一个处理事件的方法,即:侦听器方法;
                //根据不同的事件类型做出不同的动作;
   public function study(ev:ClaEvent):void{

//下面访问了事件的type属性;

        if(ev.type=="上课"){
                trace("全体起立!");
//下面访问了事件的target属性;

           trace(ev.target.nam+"好!!!");
        }
        else if(ev.type=="下课"){
                trace(ev.target.nam+"再见!!");
                }
                else trace("您发送了一个非法事件!!");
        }
        }
        
}


 楼主| 发表于 2019-1-15 16:32:51 | 显示全部楼层
首先感谢TKCB,没你的指教我写不出这个练习!
下面说说学习心得:
1,事件可以定义多个常量,作为不同的事件类型,
       实现方法就是把这些常量作为参数传入构造函数中,即可;
2,静态常量的使用:可以使用静态常量的名称,也可以使用静态常量的值,
      但是有一点要注意:使用名称不需要加""号,但要加上类名(也就相当于对属性的引用);
                                       使用值要加""号(这里我说的是这个值是字符串,其它的值我没试过);
                                     在这里我吃了很大的亏,用了将近两个小时查错!反复尝试!终于总结出这一结论!
                                       这也怨不得别人,只能怨自己在学习静态属性的时候没有用心!现在总算长了记性!
3,对于dispatchEvent方法的使用:在这个方法后面的语句,会在侦听器结束后执行!
4,事件类的type属性只能在构造函数中赋值,target属性不能赋值,它指向注册侦听器的对象!
学习中的困惑:
1,Event类中有20多个静态属性,它们的实现方法和我的这个方法是一样的吗?
2,dispatchEvent方法发送事件后,有没有什么方法监测它把事件发往哪里去了?
3,学习as3真的好费脑力!有太多的想不通!!!
回复

使用道具 举报

发表于 2019-1-15 20:11:51 | 显示全部楼层
1,Event类中有20多个静态属性,它们的实现方法和我的这个方法是一样的吗?
Event 的事件类型静态属性(常量)定义和你一样的,也都是在Event类里面写多个静态常量。

2,dispatchEvent方法发送事件后,有没有什么方法监测它把事件发往哪里去了?
这个好像默认没有这样的功能,事件发送就像广播一样,他不确定自己发给谁了。
但是可以写一个这样逻辑的代码,实现这样的功能。。
可以发送广播的时候,告诉所有人,你们收到广播后,给广播台发一条消息,说明你们收到了。
也就是侦听事件的类,给发送事件的类,在侦听函数中,收到消息时候设置一个代码,告诉对方自己收到了。。

大致就是这样的思路吧,不过一般没有这样的需求~
回复

使用道具 举报

 楼主| 发表于 2019-1-15 20:52:37 | 显示全部楼层
TKCB 发表于 2019-1-15 20:11
1,Event类中有20多个静态属性,它们的实现方法和我的这个方法是一样的吗?
Event 的事件类型静态属性(常 ...

哦,明白了,感谢赐教!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表