Cocos2d-x Lua運行流程

Cocos2d-luaCocos2d-x引擎添加了Lua綁定的版本。使用C++Cocos2d-x引擎開發時,編寫的代碼是直接調用Cocos2d-x引擎的API,因為Cocos2d-x引擎也是使用C++編寫的,所以無需進行語言轉換。而使用LuaCocos2d-x編碼時,編寫的代碼必須通過LuaEngine引擎執行,LuaEngine引擎封裝了Cocos2d-x引擎的API,所以相當于使用Lua腳本在調用Cocos2d-xAPI

Cocos2d-lua.png

Cocos2d-lua.png

主入口文件 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
  • 調用對應classCreate()方法創建對象,并執行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文件,AppBaseQuick框架自帶的一個MVC的應用程序基礎類,此類為應用程序提供一些邏輯控制上的功能,如進入場景、切換場景等。
  • class()方法本身是Quick框架定義的用于創建自定義lua類的函數,function class(classname, super)函數參數classname表示類名,super表示父類或創建對象實例的函數。

MVC

MVC是一種組合設計模式,被廣泛應用在帶有圖形交互的用戶界面程序(GUI)開發中。MVC的宗旨在于分離關注點(SoC),將界面表現和業務邏輯分離。(SoC)原則在現代軟件工程中是一個非常重要的設計理念。對于實際問題,要劃分不同的關注點,且關注點之間必須隔離開來,這樣才能達到 更好的代碼重用,以獲得魯棒性、可適配性、可維護性。

mvc.png

Cocos2d本身并不是基于MVC的理念設計的,在Cocos2d_xCCSceneCCLayerCCSprite等類都是CCNode的子類,開發流程基本是這樣的:

  1. 通過應用程序代理類來初始化第一個即主場景
  2. 場景中實例化一個或多個布景圖層,并將其添加進去。
  3. 布景圖層中實例化一個或多個精靈,并將其添加進去。
  4. 場景處理用戶輸入,例如Touch事件和加速計的改變。同時更新布景圖層和精靈,讓精靈運行一個或多個動作等。
  5. 場景中運行一個游戲循環(一般是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 提供程序退出接口
  • 提供創建 sceneview 的接口,并約定其存放路徑。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容