Egret事件機制

2021-10-01 21:47:06 字數 2105 閱讀 3826

​今天我們一起來學習下egret開發中的事件機制。掌握了事件機制對我們後續egret開發中有很大幫助。

首先設想這樣乙個場景——我們現在開發一款***(不要問原因,莫名就想給這個名字粗體)的遊戲,遊戲中有玩家控制的一架飛機,有敵人若干架飛機,敵人的飛機還發射著子彈,對面還有乙個敵方boss飛機,場景中還有隨機掉落的buff或者debuff元素……總之就是場景中的元素很多。這時玩家便便運氣爆棚,吸收了乙個buff元素——由我方戰機告知敵方一架普通型別的飛機,將其變化為自己的隊友飛機,幫助自己作戰,我們應該怎麼實現這個功能呢?

大家應該很快想到了,系統中隨機確定了敵方一架普通型別的飛機(也就是說這架飛機的id我們已經知道了),我們只要通知它完成轉化輔助我們作戰即可。但是按照物件導向的設計思路,我們應該怎麼做呢?這就運用到我們今天要學習的知識——egret開發中的事件機制!

按照預設場景的設計,我們將整個過程可以簡化後通過下圖表示。可以看出,這裡存在乙個傳送方(我方戰機),傳送的事件(變為友方戰機)和乙個接收者(敵方戰機)。而在這個事件主要包含事件型別、時間目標和事件相關資料。

事件型別:變為友方戰機。

事件目標:事件的傳送者。

了解egret事件機制的基礎概念,下面我們一起來看下egret事件機制的流程。egret事件機制流程包括:註冊***、傳送事件、監聽事件、移除***。

首先實現我們自己的飛機類——

接下來,我們實現敵方飛機類——

兩種型別互動的訊息類——

整個過程展示——

效果展示——

這裡我們的訊息型別targetevent需要繼承了乙個egret.event類,他是做什麼的呢?

event 類作為建立事件例項的基類,當發生事件時,event 例項將作為引數傳遞給事件偵聽器。event 類的屬性包含有關事件的基本資訊,例如事件的型別或者是否可以取消事件的預設行為。對於許多事件(如由 event 類常量表示的事件),此基本資訊就足夠了。但其他事件可能需要更詳細的資訊。例如,與觸控關聯的事件需要包括有關觸控事件的位置資訊。您可以通過擴充套件 event 類(touchevent 類執行的操作)將此類其他資訊傳遞給事件偵聽器。可以通過呼叫 stoppropagation() 或 stopimmediatepropagation() 方法,將當前事件偵聽器作為處理事件的最後乙個事件偵聽器。

簡單來說,event類中定義了很多常用事件,使用過egret早前一些版本的開發者可能看到過如下**——main型別的建構函式中,註冊了乙個向stage新增基礎元素的事件。

當然,為了滿足大家在實際開發中需要的自定義事件,egret允許我們繼承event並在子類中實現我們自定義的事件,就像我們上面***的例子一樣。

這裡對event的建構函式做乙個簡單說明。type:字串型別,標識時間的型別。bubbles:boolean型別,標識物件是否參與事件流的冒泡階段,預設值false(這裡出現乙個問題:「事件流的冒泡階段」是什麼?)。cancelable:boolean型別,標識時間是否可以被取消,預設false。data:any型別,標識與此事件物件關聯的資料,可選。

經過查詢資料,找到官方推薦的一篇相關介紹的文章(感謝這位朋友的介紹:

感興趣的朋友可以參考學習下。

Egret 事件機制

主要流程 private creategamescene void 首先要自定義事件 class myevent extends egret.event 每個自定義事件要有乙個唯一事件型別,因此用 static 修飾比較合適 public static date string 約會 public w...

egret事件模型

定義了乙個事件派發類 class dispatcher extends egret.eventdispatcher 注意此處是public static,this指向dispatcher類,而不是它的例項 因此,instance必須定義為靜態成員才能獲取 public static get ins ...

Egret自定義事件

自定義事件會有派發和接收的,也就是所謂的訂閱發布設計模式思想。進入正文 一 自定義事件changeevent類,分別定義發布和接收事件。自定義事件 class changeevent extends egret.event 二 發布者head類,發布者內部有公開的fabu方法,例項化發布型別,因為是...