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

搜索
查看: 3272|回复: 8
上一主题 下一主题

[事件机制] 事件练习之五(使用复合的方法创建发送事件类)

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

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

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

x
[Actionscript3] 纯文本查看 复制代码
//文档类;
package  {
	//注意:我这里没有导入EventDispatcher类,而是导入自定义的类;
	import flash.display.Sprite;
	import flash.events.Event;
	import son.ComDispatch;
	
	public class doc extends Sprite {
		//创建一个自定义类的实例属性;
		var sender:ComDispatch=new ComDispatch("赵老师");
		public function doc() {
			//每次调用EventDispatcher类的相关方法之前都要先调用getSend方法,这就是复合的特点;
			sender.Receiv(eFun);
			sender.getSend().addEventListener("下课",eFun);
			//但是doSome方法中有发送事件的方法;
			sender.doSome();
			sender.Romve(eFun);
			sender.getSend().dispatchEvent(new Event("下课"));
			sender.getSend().removeEventListener("下课",eFun);
		}
		//下面的方法将根据不同类型的事件作出不同的回应;
		private function eFun(e:Event):void{
			if(e.type=="上课"){
				trace("老师好!!");
				}
				else if(e.type=="下课"){
					trace("老师再见!");
					}
			}
	}
	
}

//用复合的方法定义一个发送事件类;
package son {
	import flash.events.Event;
	import flash.events.EventDispatcher;
	public class ComDispatch {
        //复合一个私有的EventDispatcher属性;
		private var _eDispatcher:EventDispatcher=new EventDispatcher();
		public var nam:String;
		public function ComDispatch(str:String) {
			nam=str;// constructor code
		}
		//定义一个方法,用来访问私有的属性,从而调用这个属性的相关方法;
		public function getSend():EventDispatcher{
			//在访问属性之前,先输出发送者的名字;
			trace("我是发送者:"+nam);
			return _eDispatcher;
			}
		public function doSome(){
			//下面是一个动作,并发送了“上课”事件;
			trace("我在用一个方法,并发送上课事件");
			_eDispatcher.dispatchEvent(new Event("上课"));
			}
			//用上下面的方法侦听事件;
		public function Receiv(ef:Function){
			//下面是一个动作,并接收“上课”事件;
			trace("我在用一个方法,并接收上课事件");
			_eDispatcher.addEventListener("上课",ef)
			}
		public function Romve(ef:Function){
			trace("我在用一个方法,并移除侦听器");
			_eDispatcher.removeEventListener("上课",ef);

			}


	}
	
}

 楼主| 发表于 2019-1-18 07:49:33 | 显示全部楼层
学习心得:
1、所谓复合其实就是给我们的类创建一个私有属性(我个人认为也可以是公开的属性),这个属性恰恰是我们要复合的类;
   其实我们在调用复合类的方法时,都是在调用类中属性的方法;
2、
我们也可以直接定义一个公开的方法来调用属性的方法,这样做的好处就是可以灵活的加入其他代码,
还可以省去getSender()方法,但是有一个问题,就是参数的传入!
学习中的困惑:
在复合类中事件的target属性指向的是实例的属性,而不是实例,
所以不能通过target.nam的方法来访问实例的nam属性;
那么,问题来了,假如我确实想通过事件的target属性来访问实例,有方法吗?

回复

使用道具 举报

发表于 2019-1-18 08:16:37 | 显示全部楼层
你的疑问,其实逻辑上不太对,事件的target是指向的事件发出的对象(也就是发送事件的对象)。
如果你想通过事件发送对象,知道这个对象的所处位置,那你复合这个对象的时候,可以给这个对象添加一个属性,用于指向复合类。。

但这样的程序设计需求很少,只有在舞台对象中,显示对象都有parent,用于指向自己的父容器。。

程序设计其实都是有章法的,都是为了真实情况的需要才设计成各种规则。而不是在练习代码中的想象的需求而设计。。这个得多学,多练。
回复

使用道具 举报

 楼主| 发表于 2019-1-18 09:05:08 | 显示全部楼层
TKCB 发表于 2019-1-18 08:16
你的疑问,其实逻辑上不太对,事件的target是指向的事件发出的对象(也就是发送事件的对象)。
如果你想通 ...

哦,原来如此,非常感谢!
回复

使用道具 举报

发表于 2019-1-18 09:32:08 | 显示全部楼层
雪原xy 发表于 2019-1-18 09:05
哦,原来如此,非常感谢!

也就是现在,论坛人少,我还顾得过来,如果人多了,我估计都没多少时间看帖子了~~~
不过那要很久以后了,Flash AS 的人要聚起来,挺难得,不过在努力中~~~
后续还有很多资料,,,很多,,很多~~~
回复

使用道具 举报

 楼主| 发表于 2019-1-18 10:50:39 | 显示全部楼层
TKCB 发表于 2019-1-18 09:32
也就是现在,论坛人少,我还顾得过来,如果人多了,我估计都没多少时间看帖子了~~~
不过那要很久以后了, ...

再次感谢您能在百忙之中回复我的帖子!
把有共同爱好的人聚在一起,是一件美好的事情,
美好事情的实现,需要一种缘分!
缘分的促成,需要一个舞台,
舞台的搭建,需要版主的努力!
版主的努力,我们记在心里!!
回复

使用道具 举报

发表于 2019-4-11 09:05:05 | 显示全部楼层
挺厉害的,做了这么练习,新手区帖子几乎被你独吞啦。哈哈厉害
回复

使用道具 举报

 楼主| 发表于 2019-4-11 13:30:57 | 显示全部楼层
cdt 发表于 2019-4-11 09:05
挺厉害的,做了这么练习,新手区帖子几乎被你独吞啦。哈哈厉害

主要是这里都是高手,他们都不用写练习贴!!!
回复

使用道具 举报

发表于 2019-4-15 20:07:41 | 显示全部楼层
向高手学习!
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /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)



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