溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

quick cocos2dx 3.3rc1 如何Lua調(diào)用自定義C++類(一)------ 生成橋接代碼

發(fā)布時間:2020-08-04 12:15:32 來源:網(wǎng)絡(luò) 閱讀:1526 作者:落魄碼農(nóng) 欄目:游戲開發(fā)

    雖然網(wǎng)上很多關(guān)于Lua調(diào)用自定義C++類的文章,但不知道為什么,一到自己去實踐,總是遇見這樣那樣的問題,造成失敗。讓我都懷疑文章的正確性了。。。有些因為細(xì)節(jié)原因,而文章又沒提!踩了無數(shù)的坑,昨天終于成功了,今天迫不及待寫篇文章與大家分享!

    如果對lua與C++如何交互不怎么清楚的朋友,可以看下這篇文章:

    【木頭Cocos2d-x 026】Lua篇(第01章):讓Lua和C++牽手

 

    如果版本不是3.x的,用以前版本的可以看下這篇文章:

    Cocos2d-x下Lua調(diào)用自定義C++類和函數(shù)的最佳實踐

 

    這篇文章詳細(xì)介紹了幾種lua調(diào)用C++的方法,最終說明了cocos2dx 3.x 用bindings-generator腳本,是多么的方便,我也感同身受,因為之前還用tolua++試過調(diào)用,還是以失敗告終。。。quick cocos2dx 3.3rc1 如何Lua調(diào)用自定義C++類(一)------ 生成橋接代碼

    雖然上面那篇文章說的很詳細(xì),但是我親身經(jīng)歷測試成功,還是簡單說下,讓大家看得簡單明了?。?!

    在這之前還是要說下,除了安裝好Python之外,需要進行2個步驟:

    1.安裝Pyymal

    http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe 

    2.下載pyCheetah,并解壓到C:\Python27\Lib\site-packages

    https://raw.github.com/dumganhar/my_old_cocos2d-x_backup/download/downloads/Cheetah.zip

    還有NDK版本要r9d版本!?。。。?!

 

    官方文檔:如何使用 bindings-generator 自動生成 lua綁定

    以官方文檔CustomClass類為例,步驟如下:

    以下說的frameworks都是項目下的frameworks,不是quick下的?。。?!

    1.在frameworks/runtime-src/Classes/目錄下,創(chuàng)建CustomClass類

    frameworks/runtime-src/Classes/CustomClass.h

// CustomClass.h
#ifndef __CUSTOM__CLASS
#define __CUSTOM__CLASS
#include "cocos2d.h"
class CustomClass : public cocos2d::Ref
{
public:
    CustomClass();
    ~CustomClass();
    bool init();
    CREATE_FUNC(CustomClass); 
    int foo(int i);
};
#endif // __CUSTOM__CLASS

    frameworks/runtime-src/Classes/CustomClass.cpp

#include "CustomClass.h"
CustomClass::CustomClass()
{
}
CustomClass::~CustomClass()
{
}
bool CustomClass::init()
{
    return true;
}
int CustomClass::foo(int i)
{
  return i + 100;
}

    2.在frameworks/cocos2d-x/tools/tolua/目錄下,創(chuàng)建cocos2dx_custom.ini文件

[cocos2dx_custom]
prefix = cocos2dx_custom
target_namespace = cc
android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include
android_flags = -D_SIZE_T_DEFINED_
clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include 
clang_flags = -nostdinc -x c++ -std=c++11 -U __SSE__
cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android
cocos_flags = -DANDROID
cxxgenerator_headers =
extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s
headers = %(cocosdir)s/../runtime-src/Classes/CustomClass.h
classes = CustomClass
skip =
rename_functions =
rename_classes =
remove_prefix =
classes_have_no_parents =
base_classes_to_skip =
abstract_classes =
script_control_cpp = no

     這是最簡單的ini文件了,看起來很多,其實最主要的是修改以下幾句,其他幾乎不用改變。

[cocos2dx_custom]
prefix = cocos2dx_custom
target_namespace = cc
headers = %(cocosdir)s/../runtime-src/Classes/CustomClass.h
classes = CustomClass

     具體含義看官方文檔吧,這里就不說了,這里要說的是[cocos2dx_custom],必須與文件名字一樣,否則運行腳本的時候,會報錯!反正最好和文件名字一樣,就不用再去踩坑了!prefix這個也用文件名字吧~

    3.在frameworks/cocos2d-x/tools/tolua/目錄下,修改腳本

    我把genbindings.py拷貝了一份把名字改成genbindings_custom.py,修改以下代碼:

cmd_args = {'cocos2dx_custom.ini' :('cocos2dx_custom', 'lua_cocos2dx_custom_auto') }

    這樣就只會編譯這個一個文件,節(jié)約時間?。。?/p>

    4.在frameworks/cocos2d-x/tools/tolua/目錄下,運行腳本

    在frameworks/cocos2d-x/tools/tolua/目錄下運行cmd,然后輸入命令 Python genbindings_custom.py

成功執(zhí)行g(shù)enbindings.py腳本后,會在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/目錄下,生成以下2個文件

quick cocos2dx 3.3rc1 如何Lua調(diào)用自定義C++類(一)------ 生成橋接代碼

    到此我們所需要的文件都齊全了?。。。。。?!

    關(guān)于如何調(diào)用在下篇文章講解!

    如有不足之處,請大家指出,一起交流成長!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI