寫在前面#
本專欄內容均為學堂在線慕課《3D 遊戲引擎架構設計基礎》中的內容。個人將其轉化成文字和圖片的版本(個人更加喜歡文字版本的教程,閱讀速度更快很多),方便查閱。
原課程鏈接:3D 遊戲引擎架構設計基礎。
事件處理與腳本語言#
事件處理與腳本語言概述#
事件處理#
事件驅動的遊戲互動控制:
遊戲引擎的事件處理方式影響著整個引擎架構的設計與風格。事件處理是引擎架構的底層設計,是引擎的兩大主線內容之一(另一個是場景管理和渲染渲染)。其中遊戲引擎循環架構風格包括三種:
- 回調驅動框架的互動控制方式
其中事件處理是通過回調函數執行的,示例如下:
事件處理機制框架示意:
- 基於事件更新的互動控制方式
- 視窗消息泵的互動控制方式
上述的事件處理機制中,回調驅動方式主要適用於窗口或外部輸入的設備事件,採用的是事件處理機制;基於事件更新的方式主要適用於場景渲染的幀時間更新,可以用回調函數實現更新;視窗消息泵的方式主要適用於在已有的 GUI 框架中集成互動控制。
事件處理中的設計思想,觀察者模式:
應用觀察者模式使得事件與事件處理方法在定義時耦合度較小。
腳本語言#
指為了縮短傳統的編寫 - 編譯 - 鏈接 - 運行過程而創建的計算機編程語言,也是一種編譯語言的擴展語言。其語法比較簡單,與應用程序密切相關,可以直接調用應用程序函數,一般不具備通用性。其特性包括:直譯性、輕量、支持快速迭代、方便易用。常見的腳本語言包括:Python、Lua、JavaScript 等。
遊戲引擎與腳本的關係示意如下:
其組合方式包括:
腳本語言的接口定義:
事件處理實現實例#
OGRE 事件處理#
OGRE 的事件:
所以 OGRE 的事件處理中核心是處理渲染事件,主要類FrameListener如下:
進一步地討論 frameRenderingQueued 幀渲染排隊事件:
OGRE 的渲染事件監聽相關類:
OGRE 中外部事件在OGREBites模塊中實現;OGREBites 模塊的 ApplicationContext 類是 FrameListener 類的子類,提供有方便的事件監聽接口;OGREBites 模塊的 InputListener 結構定義了鍵盤、鼠標、觸摸等輸入事件的回調函數;OGREBites 模塊的其他外部類包括:窗口事件類、GUI 的控件事件類等。
ApplicationContext類與事件處理相關的部分:
Panda3D 事件處理#
Panda3D 事件處理機制中任務的概念:
Panda3D 事件的核心類類圖:
任務類之間的關係:
AsyncTask 類接口:
事件處理機制和相關類:
事件處理器的詳細解析:
事件對象定義和處理的一個示例:
GUI 類: