Cocos2dx-3.0-rc0版本Lua的配置與使用python
如下是在WIN7 + VS2012環境下測試!android
1、下載git
到官網下載Cocos2dx-3.0-rc0。github
2、導出C++接口到Lua方法windows
這一步能夠按官方提供的文檔(\cocos2d-x-3.0rc0\tools\tolua\ README.mdown)一步一步操做:api
On Windows:
------------
* Make sure that you have installed `android-ndk-r9b`.
* Download python2.7.3 (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).
* Add the installed path of python (e.g. C:\Python27) to windows environment variable named 'PATH'.
* Download pyyaml from http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe and install it.
* Download pyCheetah from https://raw.github.com/dumganhar/cocos2d-x/download/downloads/Cheetah.zip, unzip it to "C:\Python27\Lib\site-packages"
* Set environment variables (`NDK_ROOT`)
* Go to "cocos2d-x/tools/tolua" folder, and run "genbindings.py". The generated codes will be under "cocos\scripting\auto-generated\js-bindings".python2.7
這裏有個點要注意:必定要按上面的版本要求下載對應的工具,到目前官網上NDK的最新版本是r9d,並且這裏是要求r9b。若是不是按版本要求就會出現如下問題:函數
'functional' file not found 的錯誤工具
解決方法有兩個:a. 下載對應版本 b. 把全部的.ini文件(\cocos2d-x-3.0rc0\tools\tolua目錄下)裏的4.7修改爲4.8測試
完成以後,就是按最後一步說的,在命令行下執行cocos2d-x/tools/tolua目錄下的genbindings.py。
最後結果就是在\cocos2d-x-3.0rc0\cocos\scripting\lua-bindings\auto目錄下會生成一些.cpp和.hpp文件。
3、導出自定義的C++接口到Lua方法
到第二步,就是了解了導出的大概方法。咱們最終的目的仍是要導出自定義的接口。
這一步參考了這篇博客(http://www.cnblogs.com/mrblue/)。
總結了一下步驟:
1:環境,若是第二步是對的就OK了
2:寫一個本身的C++類(LuaSprite.h這也是我測試cocos2dx-2.x版本時候的例子,繼續用)
#ifndef cocos2dx_lua_tests_by_guo_LuaSprite_h #define cocos2dx_lua_tests_by_guo_LuaSprite_h #include "cocos2d.h" using namespace cocos2d; class LuaSprite: public cocos2d::Sprite { public: int varInt; static LuaSprite* createLuaSprite(const char* _name); void LuaSpriteInit(); void LuaCallFun(); }; #endif
3.編寫python腳本,直接修改原來的genbindings_New.py文件(複製一份)
a.修改生成目錄到咱們本身的工程目錄:output_dir
b.修改命令參數:cmd_args
4. 修改ini配置文件,也就是上面cmd_args裏配置的.ini文件(myclass.ini),一樣的複製一份原來的.ini文件修改。
主要修改如下幾個:
[myclass]
prefix = myclass
target_namespace =
headers = %(cocosdir)s/tests/lua-empty-test/project/Classes/LuaSprite.h
classes = LuaSprite*.
skip =
abstract_classes =
這裏有幾個地方要注意的:
a. 節點名要跟cmd_args裏配置的一致
b. Classes這項按照參考的那篇blog裏配置方法,生成的文件裏沒內容的,後來反覆對比原來的配置修改爲如今這樣,最後成功了
5. 最後執行genbindings_New.py,若是成功你會看到:
dos2unix: Skipping api, not a regular file. dos2unix: converting file lua_MyClass_auto.cpp to Unix format ... dos2unix: converting file lua_MyClass_auto.hpp to Unix format ... --------------------------------- Generating lua bindings succeeds. ---------------------------------
同時也會在,指定的目錄下生成:
api文件夾、lua_MyClass_auto.cpp、lua_MyClass_auto.hpp
其中lua_MyClass_auto.cpp裏有個註冊函數內容以下:
int lua_register_MyClass_LuaSprite(lua_State* tolua_S) { tolua_usertype(tolua_S,"LuaSprite"); tolua_cclass(tolua_S,"LuaSprite","LuaSprite","cc.Sprite",nullptr); tolua_beginmodule(tolua_S,"LuaSprite"); tolua_function(tolua_S,"LuaSpriteInit",lua_MyClass_LuaSprite_LuaSpriteInit); tolua_function(tolua_S,"LuaCallFun",lua_MyClass_LuaSprite_LuaCallFun); tolua_function(tolua_S,"createLuaSprite", lua_MyClass_LuaSprite_createLuaSprite); tolua_endmodule(tolua_S); std::string typeName = typeid(LuaSprite).name(); g_luaType[typeName] = "LuaSprite"; g_typeCast["LuaSprite"] = "LuaSprite"; return 1; }
到目前爲止完成了環境配置與自定義接口Lua接口。