2012 台北遊戲App開發者論壇:Designing a Component-based Architecture in Lua for Game Apps

app-forum-taiwan_01

這是我在「2012 台北遊戲App開發者論壇」演說的主題,希望藉此機會與大家分享這幾年來使用 Lua 程式語言的心得,以及採用「組件式架構」(Component-based Architecture)的程式寫作樂趣。

Lua 和「組件式架構」也是我用來開發《勾玉忍者》與《邦妮早午餐2》的主要技術。

英文版文章:Designing a Component-based Architecture in Lua for Game Apps

app-forum-taiwan_02

  • C++:負責通用與抽象的遊戲框架層。
  • Objective-C:與 iOS 平台相關的部分以及 OpenGL ES 實作層。
  • Lua:資料描述,遊戲邏輯,使用者介面,及其他所有的一切。

app-forum-taiwan_03

任何遊戲物件皆可由「遊戲組件」組合而成。在此的 Player 物件,內含三個組件:

  • Transform:物件於遊戲世界中的位置、旋轉與縮放。
  • Quad:平面矩形,用來代表物件的可視性。
  • BoundingBox:碰撞偵測,包含使用者輸入及 AI 判斷用。

app-forum-taiwan_04

不同於物件導向式架構,組件式架構較易於自由安排物件組件的更新及繪製程序,甚至可於程式中動態插入或拔除相關程序,靈活度極高。

app-forum-taiwan_05

所謂的「遊戲物件」,事實上只不過是個「容器」罷了。它本身並不需要認識任何遊戲組件或瞭解組件功能;事實上,它只負責抽象層的管理,所有的功能任務都是委託交遞給旗下的各項組件執行運作。真正的權力,在遊戲組件們身上。

app-forum-taiwan_06

以 Interpolator 組件為例,它可將一變數由起始值內插至終點值,只要利用此組件內插所得之數值,便可用於更新遊戲圖片的 Alpha 值或遊戲物件的縮放值。只要善加利用這項特性,就可使遊戲物件及使用者介面的表演展示更加生動活潑。

app-forum-taiwan_07

關於記憶體管理的部分,Lua 端完全不插手,全權交由 C++ 端管理。雖然使用 Lua 確實可實作出具複雜度的記憶體管理機制,但我選擇清楚地分隔 Lua 與 C++ 之間的權責,可使遊戲 App 較不易發生記憶體相關的問題。

app-forum-taiwan_08

希望各位能夠生活得好,快樂寫程式,做出很棒的遊戲!

英文版文章:Designing a Component-based Architecture in Lua for Game Apps

完整簡報下載:https://speakerdeck.com/halflucifer/designing-a-component-based-architecture-in-lua-for-game-apps

「組件式架構」教學文章:Introduction to Component Based Architecture in Games

Leave a Reply