Cocos2d-lua
是 Cocos2d-x
引擎添加了Lua
綁定的版本。使用C++
和Cocos2d-x
引擎開發時,編寫的代碼是直接調用Cocos2d-x
引擎的API
,因為Cocos2d-x
引擎也是使用C++
編寫的,所以無需進行語言轉換。而使用Lua
和Cocos2d-x
編碼時,編寫的代碼必須通過LuaEngine
引擎執行,LuaEngine
引擎封裝了Cocos2d-x
引擎的API
,所以相當于使用Lua
腳本在調用Cocos2d-x
的API
。
主入口文件 main.lua
main.lua
啟動文件是Cocos2d-lua
項目默認主入口,項目啟動時默認首先執行main.lua
文件。
運行流程
步驟0:設置 編譯后的客戶端開始執行時,使用FileUtils
加載Luac
文件的提示是否顯示。
cc.FileUtils:getInstance():setPopupNotify(true)
步驟1:將源代碼src
目錄和資源res
目錄添加到文件搜索路徑
cc.FileUtils:getInstance():addSearchPath("src/")
cc.FileUtils:getInstance():addSearchPath("res/")
注:通過addSearchPath()方法設置源代碼和資源的搜索路徑
步驟2:加載配置文件讀取配置
require "config"
-
config.lua
配置文件用于定義初始化所使用的全局變量 -
require()
方法表示引入一個文件,使用require()
方法加載文件的過程會檢查文件的lua
語法,同時會完成被加載文件內部變量的初始化。
步驟3:執行初始化
加載cocos/init.lua
文件,根據config.lua
配置文件對cocos2d-lua
框架進行初始化。
require "cocos.init"
步驟4:加載app
目錄下MyApp.lua
文件,創建App對象并調用run()
函數。
local function main()
require("app.MyApp"):create():run()
end
- 調用對應
class
的Create()
方法創建對象,并執行run()
方法。 -
run()
函數用于配置第一個進入的場景,默認為MainScene
。 - 通過載入的
app.MyApp
模塊創建一個MyApp
實例,并調用實例的run()
方法,此時將啟動執行MyApp
腳本。
配置文件 config.lua
-
DEBUG
設置輸出調試信息選項,即通過控制不同的print()輸出信息。
0 表示關閉
1 表示打印少量調試信息
2 表示打印標準完整的調試信息 -
CC_USE_FRAMEWORK
設置是否使用quick框架,其中包括MVC框架。
*CC_SHOW_FPS
設置是否顯示FPS等顯卡信息 -
CC_DISABLE_GLOBAL
設置是否允許定義全局字段 -
CC_DESIGN_RESOLUTION
設置不同分辨率
默認應用 MyApp.lua
應用文件:app/MyApp.lua
local MyApp = class("MyApp", cc.load("mvc").AppBase)
function MyApp:onCreate()
math.randomseed(os.time())
end
return MyApp
-
MyApp
類繼承自mvc
中的cc.mvc.AppBase
類,系統自動查找packages/mvc/AppBase.lua
文件,AppBase
是Quick
框架自帶的一個MVC的應用程序基礎類,此類為應用程序提供一些邏輯控制上的功能,如進入場景、切換場景等。 -
class()
方法本身是Quick
框架定義的用于創建自定義lua
類的函數,function class(classname, super)
函數參數classname
表示類名,super
表示父類或創建對象實例的函數。
MVC
MVC
是一種組合設計模式,被廣泛應用在帶有圖形交互的用戶界面程序(GUI)
開發中。MVC
的宗旨在于分離關注點(SoC)
,將界面表現和業務邏輯分離。(SoC)
原則在現代軟件工程中是一個非常重要的設計理念。對于實際問題,要劃分不同的關注點,且關注點之間必須隔離開來,這樣才能達到 更好的代碼重用,以獲得魯棒性、可適配性、可維護性。
Cocos2d
本身并不是基于MVC
的理念設計的,在Cocos2d_x
中CCScene
、CCLayer
、CCSprite
等類都是CCNode
的子類,開發流程基本是這樣的:
- 通過應用程序代理類來初始化第一個即主場景
- 場景中實例化一個或多個布景圖層,并將其添加進去。
- 布景圖層中實例化一個或多個精靈,并將其添加進去。
- 場景處理用戶輸入,例如
Touch
事件和加速計的改變。同時更新布景圖層和精靈,讓精靈運行一個或多個動作等。 - 場景中運行一個游戲循環(一般是1/60更新一次),然后布景圖層和精靈在游戲循環中做更新和游戲邏輯。
對于手游而言,界面UI
的布局與顯示都是由View
負責的,點擊事件手勢滑動等操作是由Controller
來處理的,游戲中需要的數據是由Model
負責的。
local MyApp = class("MyApp", cc.load("mvc").AppBase)
/src/packages/mvc/AppBase.lua
中定義了一個AppBase
基類,作為所有Quick
游戲的Lua
入口,由player
新建的工程,有個app/MyApp.lua
文件就是繼承自AppBase
類。
AppBase
功能類似于iOS
工程中的AppDelegate.m
實現的功能:
- 程序前后臺切換事件的接收和分發
- 為
framework
提供程序退出接口 - 提供創建
scene
與view
的接口,并約定其存放路徑。