Cocos 2 dx-3.0-rc 0バージョンLuaの構成と使用

4427 ワード

Cocos 2 dx-3.0-rc 0バージョンLuaの構成と使用
以下はWIN 7+VS 2012環境でテストします!
一、ダウンロード
Cocos 2 dx-3.0-rc 0を公式サイトでダウンロードします.
二、C++インタフェースをLuaにエクスポートする方法
         このステップは、公式に提供されているドキュメント(cococos 2 d-x-3.0 rc 0toolstoluaREADME.mdown)に従って一歩一歩操作できます.
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".
         ここで注意したいことがあります.必ず上のバージョンの要求通りに対応するツールをダウンロードしなければなりません.現在の公式サイトのNDKの最新バージョンはr 9 dで、ここではr 9 bが要求されています.バージョンの要求でなければ、以下の問題が発生します.
          'functional'file not foundのエラー
         解決方法は2つある:a. 対応バージョンのダウンロード b. すべての.iniファイル(cococos 2 d-x-3.0 rc 0toolstoluaディレクトリ下)の4.7を4.8に変更
         完了したら、コマンドラインの下でcococos 2 d-x/tools/toluaディレクトリのgenbindings.pyを実行します.
         最後の結果、cocos 2 d-x-3.0 rc 0cocosscriptinglua-bindingsautoディレクトリの下に.cppと.hppファイルが生成されます.
 
三、カスタムC++インタフェースをLua方法にエクスポートする
         2つ目のステップは、エクスポートの概要を理解することです.最終的な目的は、カスタムインタフェースをエクスポートすることです.
         このブログを参考にしてみました(http://www.cnblogs.com/mrblue/).
         手順をまとめました.
                   1:環境、2ステップ目が正しければOK
                   2:自分のC++クラスを書く(LuaSprite.hこれも私がcococos 2 dx-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インタフェースが完了しています.