1. 程式人生 > >tolua框架學習(五)

tolua框架學習(五)

       本例講解了在lua中使用協程。建立了三個變數,其中,luaFile是lua指的是lua指令碼。looper應該是和協程相關的物件。

ooper應該是和協程相關的物件。

例項化了一個LuaResLoader()物件,但是沒有變數來接收該物件,很奇怪。。LuaResLoader繼承自LuaFileUtils。初始化了LuaFileUtils中的幾個欄位。其中searchPath是查詢檔案的路徑,zipMap是AB資源包。

中的幾個欄位。

建立lua虛擬機器,並啟動。接下來是執行了一步LuaBinder.Bind(lua),這一步的目的是註冊unity中的模組和一些類到lua中去。

下一步是初始化委託管理器DelegateFactory

,新增一系列型別的事件、委託到內部字典等等操作。下一步在gameObject物件上掛載了一個LuaLooper指令碼。該指令碼猜測是用於控制迴圈的。該指令碼在Start()方法中會獲取幾個事件,這幾個事件和MonoBehaviour的Update(),LateUpdate()FixedUpdate()相關。

相關。

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指令碼中,相關協程的方法,進行呼叫。