Egret事件机制

自学开发笔记,有兴趣的同学请关注微信WiGameFun,不定时分享游戏开发相关技术。有不对的地方烦请指点修正。
Egret事件机制_第1张图片

Egret事件机制

​今天我们一起来学习下Egret开发中的事件机制。掌握了事件机制对我们后续Egret开发中有很大帮助。

Egret事件机制介绍

首先设想这样一个场景——我们现在开发一款打飞机(不要问原因,莫名就想给这个名字粗体)的游戏,游戏中有玩家控制的一架飞机,有敌人若干架飞机,敌人的飞机还发射着子弹,对面还有一个敌方BOSS飞机,场景中还有随机掉落的BUFF或者DEBUFF元素……总之就是场景中的元素很多。这时玩家便便运气爆棚,吸收了一个BUFF元素——由我方战机告知敌方一架普通类型的飞机,将其变化为自己的队友飞机,帮助自己作战,我们应该怎么实现这个功能呢?

Egret事件机制_第2张图片

大家应该很快想到了,系统中随机确定了敌方一架普通类型的飞机(也就是说这架飞机的ID我们已经知道了),我们只要通知它完成转化辅助我们作战即可。但是按照面向对象的设计思路,我们应该怎么做呢?这就运用到我们今天要学习的知识——Egret开发中的事件机制!

按照预设场景的设计,我们将整个过程可以简化后通过下图表示。可以看出,这里存在一个发送方(我方战机),发送的事件(变为友方战机)和一个接收者(敌方战机)。而在这个事件主要包含事件类型、时间目标和事件相关数据。

事件类型:变为友方战机。

事件目标:事件的发送者。

事件相关数据:就是上面改变友方战机事件一些数据。比如将敌方战机变为友方战机后,战机的血量、发射子弹的伤害值、飞行方向、线路等会发生改变。

Egret事件机制_第3张图片

Egret事件机制流程

了解Egret事件机制的基础概念,下面我们一起来看下Egret事件机制的流程。Egret事件机制流程包括:注册监听器、发送事件、监听事件、移除监听器。

首先实现我们自己的飞机类——
Egret事件机制_第4张图片

接下来,我们实现敌方飞机类——
Egret事件机制_第5张图片

两种类型交互的消息类——
Egret事件机制_第6张图片

整个过程展示——
Egret事件机制_第7张图片

效果展示——
Egret事件机制_第8张图片

egret.Event类型

这里我们的消息类型TargetEvent需要继承了一个egret.Event类,他是做什么的呢?

Event 类作为创建事件实例的基类,当发生事件时,Event 实例将作为参数传递给事件侦听器。Event 类的属性包含有关事件的基本信息,例如事件的类型或者是否可以取消事件的默认行为。对于许多事件(如由 Event 类常量表示的事件),此基本信息就足够了。但其他事件可能需要更详细的信息。例如,与触摸关联的事件需要包括有关触摸事件的位置信息。您可以通过扩展 Event 类(TouchEvent 类执行的操作)将此类其他信息传递给事件侦听器。可以通过调用 stopPropagation() 或 stopImmediatePropagation() 方法,将当前事件侦听器作为处理事件的最后一个事件侦听器。

简单来说,Event类中定义了很多常用事件,使用过egret早前一些版本的开发者可能看到过如下代码——Main类型的构造函数中,注册了一个向Stage添加基础元素的事件。

Egret事件机制_第9张图片

当然,为了满足大家在实际开发中需要的自定义事件,egret允许我们继承Event并在子类中实现我们自定义的事件,就像我们上面打飞机的例子一样。
在这里插入图片描述

这里对Event的构造函数做一个简单说明。type:字符串类型,标识时间的类型。bubbles:boolean类型,标识对象是否参与事件流的冒泡阶段,默认值false(这里出现一个问题:“事件流的冒泡阶段”是什么?)。cancelable:boolean类型,标识时间是否可以被取消,默认false。data:any类型,标识与此事件对象关联的数据,可选。

Egret事件机制_第10张图片
经过查找资料,找到官方推荐的一篇相关介绍的文章(感谢这位朋友的介绍:http://www.cnblogs.com/zjhnl/archive/2012/05/23/2514841.html)。

http://bbs.egret.com/forum.php?mod=viewthread&tid=548&highlight=%E4%BA%8B%E4%BB%B6%E6%B5%81,感兴趣的朋友可以参考学习下。

好了,关于Egret的事件机制就先研究到这里吧。下一篇和大家探讨下什么问题呢——Egret中第三方库的制作……Egret游戏中的多分辨率适配……调用原生JS代码……还是什么呢?有兴趣的朋友给我留言吧 _

你可能感兴趣的:(Egret开发)