close

事件管理器是什麼:

這邊用遊戲做例子,事件管理器主要就是管理玩家可能因為遊戲機制而觸發的預設事件,假設玩家死亡這件事已經被列為一個事件在事件管理器內做管理,那當玩家死亡事件觸發後,就會把死亡事件由事件管理器去通知可能播放死亡音效、顯示死亡UI、抑或是自動調整遊戲難度等等,而我們就是利用設計模式裡的觀察者模式去進行實作,不知道觀察者模式的可以點連結回去查看   觀察者模式

而今天這篇會分享以觀察者模式架構所做的事件管理器的處理方式,後面會帶到成就系統的關係

事件管理器 程式架構 UML (例)

Untitled (2)

以上例子的實作大至分類為: 

遊戲事件列舉

GameEvent {

  • 玩家連擊事件
  • 玩家失敗事件
  • 玩家勝利事件
  • 玩家Good事件
  • 玩家Perfect事件

}

 

遊戲事件管理器類別

GameEventManager {

  • 包含事件與事件主題類別的Dictinary
  • 觀察者註冊事件方法(註冊者依想註冊的遊戲事件找到事件主題並對主題註冊)
  • 通知方法(通知所有註冊XX事件的註冊者,XX事件發生了,並帶想傳遞的事件資料)

}

 

遊戲事件主題類別

IGameEventSubject {

  • 遊戲事件觀察者List
  • 主題註冊方法
  • 取消註冊方法
  • 通知方法(通知所有註冊本事件主題的註冊者本事件主題發生)
  • 需要的傳遞的事件資訊設定方法

}

 

 

各種遊戲事件觀察者類別(以PerfectSubject為例)

PerfectSubject{ //繼承IGameEventSubject  

  • 繼承IGameEventSubject的方法  
  • Perfect的次數  
  • 目前的關卡名  
  • 取得目前得到Perfect的關卡名稱方法  
  • override 需要的傳遞的事件資訊設定方法(取得傳入的關卡名資訊並加上Perfect次數)

}

 

 

遊戲事件觀察者類別

IGameEventObserver {

  • 設定主題方法
  • 被通知事件之後的更新方法

}


各種遊戲事件觀察者類別(以PerfectObserverUI為例)

PerfectObserverUI{ //繼承IGameEventObserver  

  • 註冊的主題   
  • GameUI類別   
  • PerfectObserverUI建構子(建立時帶入GameUI類別設置)
  • 實作設定主題方法
  • 實作被通知事件之後的更新方法(取得註冊主題的相關資訊,並呼叫GameUI的ShowPerfect帶入主題資訊做更新)

}

透過觀察者註冊事件的類別(以GameUI為例)

GameUI

{

  • 初始方法(帶入自己建立屬於自己的觀察者類別,並透過事件管理器註冊事件)  
  • 事件相關須更新的方法(這裡以ShowPerfect為例)

Code:

  • 遊戲事件列舉 

截圖 2023-01-06 下午4.31.08

  • 遊戲事件管理器類別

這裡的GameEventManager繼承了Singletion這裡涉及了單例模式的部分,可以參考:單例模式

 

截圖 2023-01-06 下午4.59.07

  • 遊戲事件主題類別

截圖 2023-01-06 下午5.02.43

  • 各種遊戲事件主題類別(以PerfectSubject為例)

截圖 2023-01-06 下午5.03.21

  • 遊戲事件觀察者類別

截圖 2023-01-06 下午5.03.43

  • 各種遊戲事件觀察者類別(以PerfectObserverUI為例)

截圖 2023-01-06 下午5.04.10

  • 透過觀察者註冊事件的類別(以GameUI為例)

截圖 2023-01-06 下午5.04.33

當然成就系統也理所當然可以註冊事件管理器得到他想要的資訊,如同GameUI的例子,產生多個相關事件觀察者進行註冊

就像剛剛GameUI有一個專屬對Perfect事件的觀察者PerfectObserverUI

成就系統也可以有一個專屬觀察者對Perfect主題做觀測PerfectObserverAchievement,例如:

截圖 2023-01-06 下午5.04.58

然後還可以多加入ComboObserverAchievement,GoodObserverAchievement等觀察者

最後在成就系統做初始化時,做事件系統註冊

截圖 2023-01-06 下午5.05.22

這樣就能把事件傳入成就系統,就可以繼續往下做其他成就存檔和呈現了

其實事件管理和成就系統還可以再改善與變化,會再另外做一篇發布,但純粹用觀察者模式來實作事件管理和成就系統就差不多是這樣

arrow
arrow

    Kouhei 發表在 痞客邦 留言(0) 人氣()