tolua框架學習(五)
本例講解了在lua中使用協程。建立了三個變數,其中,luaFile是lua指的是lua指令碼。looper應該是和協程相關的物件。
例項化了一個LuaResLoader()物件,但是沒有變數來接收該物件,很奇怪。。LuaResLoader繼承自LuaFileUtils。初始化了LuaFileUtils中的幾個欄位。其中searchPath是查詢檔案的路徑,zipMap是AB資源包。
建立lua虛擬機器,並啟動。接下來是執行了一步LuaBinder.Bind(lua),這一步的目的是註冊unity中的模組和一些類到lua中去。
下一步是初始化委託管理器DelegateFactory
GetEvent()方法內部也是通過LuaState.GetTable()獲取了和引數相關的table,然後通過該table建立了LuaBeatEvent物件,並
且返回。然後對該table添加了“增”和“刪”方法。
接下來載入執行了一個外部的lua指令碼。同時獲取了該指令碼中的TestCortinue方法,該方法是開啟協程的方法。
這裡需要注意的一點是在lua指令碼中,本例中是直接使用了coroutine關鍵字,猜想該關鍵字應該是提前註冊進了lua中。lua指令碼中涉及了一些協程的方法:
1、coroutine.wait(時間), 有點類似於Thrad.Sleep()方法;
2、coroutine.step()
3、coroutine.www(www物件),這個方法應該是啟動下載的。
4、coroutine.start(方法),啟動一個協程
5、coroutine.stop(nil),停止協程
總結:
呼叫lua中的協程時,需要掛載一個LuaLooper指令碼。同時設定其LuaState物件為當前虛擬機器物件。
在本例中,掛載LuaLooper指令碼前,建立了LuaResLoader()例項物件,該物件是用於下載資源。同時呼叫了LuaBinder.Bind()方法,註冊unity中的類。
獲取lua指令碼中,相關協程的方法,進行呼叫。