Lua的好處是什麼以及如何用Lua設計所謂「組件式架構」?

我用普通的類繼承結構編寫遊戲,於是常常製造出很龐雜的繼承樹。剛才無意中在別人的博客中發現他提到他在用Lua實現「組件式架構」來做遊戲,很想了解詳細。。


1. Lua的好處在於用腳本可以大大提高遊戲開發效率,一方面是不需要仔細檢查內存釋放野指針等危險,每人天可以編更多行代碼,另一方面是同一個功能點可以用更少的代碼行數實現, lua/python/lpc/javascript都可以達到這個目標;

2. 組件式結構是和繼承結構對立的,這個是架構設計的問題,和編程語言沒有直接關係。推薦你看一下這系列文章 http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/ 。簡單說來就是比如在根節點搞個map,然後各種功能模塊就往這個map裡面註冊增刪,功能模塊相互訪問是靠key去查表得到其他模塊的訪問入口(比如指針),如果沒查到就返回。這樣設計可以並方便每個獨立模塊的調試和開發,並允許多個模塊之間並行開發,不相互依賴進度。不過注意這種設計是以犧牲一定性能為代價的。直接函數調用高耦合但運行效率高。


lua支持熱更新,這樣帶來的好處有兩點:

1)開發時不用頻繁的編譯/重啟程序,只需重新載入lua腳本即可,這個意義很大,開發效率提高了很多

2)發布出去的程序有問題的話,可以動態更新修正.

另外,與lua從一開始的定位有關:做一門嵌入式的語言,為宿主環境提供動態特性.又由於與CC++的結合很方便,同時CC++又十分缺少動態特性,使得Lua非常合適做一門膠水語言.


不上v8的js不能和lua拼速度

lua的上手速度比js快的多


你所說的組件式架構,就是我目前遊戲主要採用的方式。實現起來簡單來說就是採用基類表裡用一個表(可以使用閉包來隱藏實現)存儲各個模塊,然後調用的時候用專門的一個函數來調用模塊內函數(先查詢再調用),基類寫好模塊的註冊反註冊介面,控制好生命周期,後續再繼承這個基類表就好了。缺點就是損耗會稍微高點,看情況使用,另記得善用尾調用。


lua能勝任簡單的工作。

lua一旦複雜起來比c++有過之無不及


Lua首先是輕量,概念簡單,語法簡單,抄起來就能用,相比C++來說,在邏輯開發上效率是高一些(當然,還是看開發者能力而論,把lua寫的比C++還複雜的大有人在)。

所謂組件式,對這個名詞沒感覺,難道是模塊化嗎?


分享一篇 博客 Lua 與 Redis


提高遊戲開發效率,主要便於隨時可以進行調試和修改,可以熱更新。

不太容易遇到野指針的問題。


推薦閱讀:

設計模式之七大基本原則
設計模式之單例模式
抽象工廠模式和工廠模式的區別?
敏捷開發中如何保證界面設計?
狀態模式和策略模式的區別與聯繫?

TAG:遊戲開發 | 設計模式 | iOS遊戲開發 |