tolua框架學習(二)

2021-08-29 08:04:45 字數 1682 閱讀 7661

這裡是從tolua的案例開始學習的。

tolua的第一的案例就是hello world。**很簡單。tolua的使用分為三步:

1、例項化乙個lua虛擬機器,這裡就是new乙個luastate物件,通過start()方法啟動虛擬機器。啟動方法,設定了一系列的屬性值。這裡的luastate就相當於luainte***ce中的lua類,只不過要複雜很多。

2、使用dostring方法執行lua**片段

3、對lua虛擬機器棧的判空,具體對應的就是checktop方法。

4、析構虛擬機器

這是乙個簡單的使用tolua框架的過程。

第二個案例是講解的dofile方法和require方法的異同。這兩個方法都是執行的同乙個lua檔案,執行結果也是一樣的。唯一的不同點在於載入lua指令碼是,使用的路徑(名字),如下圖:

dofile方法加了「.lua」字尾,require方法則沒有加。而且,dofile()方法可以反覆執行,但是,require方法只能執行一次。

dofile方法在載入檔案的時候,有一步fildfile()的方法,該方法會檢測引數是否是以「.lua」結尾的,然後去掉字尾,最終會嘗試將獲取到的檔名新增進乙個完整的路徑中判斷該路徑是否存在,存在則返回該路徑。路徑如下:

會迴圈這個7個路徑,用擷取字尾的檔名替換其中的「?」,來獲取完整的路徑。找到路徑後,通過file.readallbytes()讀取檔案流。值得注意的是,doflie方法中有一步luachunkname()方法,該方法會在檔名(去掉字尾的)前面新增乙個@符號。lualoadbuffer方法是真正讀取lua檔案內容的方法。通過單步除錯,跟蹤到了tolua指令碼下的print()方法,該方法接受乙個intptr物件,這個方法會迴圈lua指令碼中的每一行進行判斷,並且執行。在本例中,是輸出了兩句string,所以跳轉到了luadll中的lua_ptrtostring中,由該方法獲取了列印的內容。通過測試發現,print()方法會將輸出結果針對string,nil,bool,之類,進行分別的處理,其在迴圈中做了一系列的判斷。值得注意的是,lua中的方法的執行,在單步除錯中是沒有體現出來的。但是結果依舊會獲取到。

require()方法的引數是不需要加字尾的。呼叫luarequire()後,會呼叫tolua指令碼中的loader()方法。其也是通過file.readallbytes()讀取檔案,這一點和dofile方法是一致的。loader方法返回1。其後直接呼叫print方法,這裡都是一致的。控制不能重複呼叫的地方在於luarequire()方法。第一次呼叫的時候,會返loader()方法,其後就不再呼叫loader()方法了。直接返回。

tolua框架學習(十一)

案例18講的是對於載入ab包的測試。整個過程模擬的載入資源,然後進入lua主入口的過程。獲取到ab資源後,按照資源數量,獲取到資源後,新增到luafileutils內部儲存的字典中去。最後啟動lua主入口。案例19將的是使用json。關於json的簡單介紹可以參考這篇文章。本例的lu 段中requi...

Tolua學習記錄一

tolua是unity靜態繫結lua的乙個解決方案 它是乙個用來簡化在c 中整合lua的外掛程式 它自動生成用於在lua中訪問unity的繫結 它把c 中的常量 變數 函式 屬性 類以及列舉暴露給lua 1 c 特性attribute 2 值型別和引用型別 二者均繼承自 system.object ...

tolua學習資料彙總貼

tolua工程位址 uluagit位址 遊戲框架位址 遊戲案例位址 除錯測試工程 ulua debugger demo lua教程位址 c 轉lua exceltolua位址 碧俐千仞的tolua學習筆記 華的tolua使用經驗分享 孤雲的ugui lua框架版本 最快的json解析 序列化 啪啪啪...