【Quick-COCOS2D-X 3.3 怎樣繫結自己定義類至Lua之三】動手繫結自己定義類至Lua

weixin_34126215發表於2016-01-15

    檢視【Quick-COCOS2D-X 3.3 怎樣繫結自己定義類至Lua之二】新建專案中配製環境,我們完美的在新建專案中完畢了繫結須要的環境,接下來才是最關健的一步。繫結自己定義C++類至Lua。

    其實引擎為了方便我們應對不同平臺,已經幫我們建立了不同平臺的project專案。

為了編輯程式碼方便。我使用VS2013開啟了"runtime-src"資料夾下的"proj.win32"project。 前往項資料夾徑“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。我將在這裡建立一個自己定義類"Pet",程式碼例如以下。








僅僅是一個非常easy的Pet類。

1.繼承於引擎定義的精靈類Sprite;
2.通過引擎定義的巨集CREATE_FUNC(Pet)定義一個靜態方法create();
3.兩個成員函式init()、setPet();
4.具有一個資料成員name。

    很的簡單。我們正是要一切從簡單開始。只是須要再次提醒的是我們是在“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”建立了Pet類,一會我們將用到這個路徑。

    準備好定義C++類之後,我們再回想一下上一小節的內容,我們在環境測試中。通過執行“genbindings.py"指令碼將Cocos2d-x引擎中全部的C++類檔案繫結至Lua。(儘管測試環境時。我並沒有說明這點。

可是實事上

在最後的結果中能看到"Generating lua bindings succeeds"這種提示,聰明的讀者一定猜到了它所完畢的工作就是繫結C++類至Lua

  接下來。開啟 "genbindings.py,假設你對Python語言並不熟悉。哪請忽略其他的程式碼,僅僅須要把你的視線焦點集中在 133 行至 151 行。

// 指定tolua所在的錄徑 無需改動

tolua_root = '%s/tools/tolua' % project_root 


// 指定繫結指令碼執行後,產生的繫結一系列檔案輸出儲存於何路徑

// 儘管無需改動,可是我們要記住,我們產生的繫結檔案是輸出於

// "F:\Cocos2dx-Lua\Garfield\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto"

output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root


// 這個陣列中指定了要執行繫結指令碼的一些配製引數 ,看到第一行。'cocos2dx.ini' 是一個配製檔案,我們能夠在"genbindings.py"同級資料夾中找到它。‘cocos2d-x’實際上是在 'cocos2dx.ini' 配製檔案裡的第一行所指定的一個字元常量,主要是用於生成繫結橋接檔案時。為諸如條件編譯 ifndef 及 生成的註冊自己定義類介面取名所用。一會我將會在後面稍提這點,這裡假設不明確。請臨時忽略它。‘lua_cocos2dx_auto’是給生成的繫結橋接檔案指定的言語件名。

cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \

                      ... ...

}




     瞭解"genbindings.py"之後在它的同級資料夾你能夠找到cocos2dx.ini“,這是與之息息相關的配製檔案。開啟它,我們稍做了解。


   

    請關注於 第 1、4、8、25 、29行。

    還記得上面我們提到的陣列嗎?

    cmd_args  = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \

                      ... ...

    }

    第 1 行就是第二個引數指定的字元內容 

    第 4 行是一些條件編譯 ifndef 及 生成的註冊自己定義類介面取名所用的字首。前面我們已經提到過。

    第 8 行是指定該繫結類的名稱空間

    第 25 行指定須要繫結的自己定義類標頭檔案路徑

    第29行 指定繫結的C++自己定義類匯出後的Lua類檔名稱



    瞭解這些之後。我們將對這兩個檔案進行一些改動,用於完畢我們的類至Lua的繫結。

     首先我們拷貝一份'cocos2dx.ini',將其命名為 'custom_pet.ini'。拷貝一份'genbindings.py',將其命名為 'custom_pet_genbindings.py'


     修改'custom_pet.ini'第 1、4、8、25 、29行。例如以下:

     由於我們沒有指定名字空間。所以第 8 行'target_namespace'將其賦空。

     而'headers'其中僅僅是相對路徑的給定。還記得"Pet"類我們是建立於哪裡嗎?

     正是在F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。



   

    OK。接下來我們修改'custom_pet_genbindings.py'。關注於第 133 至 138 行,我們將在這裡做一些改動。例如以下:

    在cmd_args參數列中,我們指定該Python繫結指令碼的配製檔案為我們改動好的'custom_pet.ini'

一些可能會用到的命名字首為'custom_pet'。指定匯出的橋接檔名稱為'lua_pet_auto'





   最後。我們執行'custom_pet_genbindings.py'。 

   "Generating lua bindings succeeds"。

   見到它,你該歡呼了:)。你已經完畢了C++自己定義類至Lua的繫結。

   在下一小節中,我們來探索下,怎麼樣在你的專案中使用Lua呼叫Pet類。





   

相關文章