Cocos2dx3.0 detailed steps for exporting custom classes to Lua

Source: Internet
Author: User

I wrote a method to export the class to Lua using the tool 3.0 to automatically generate code.

In the past, to export the C ++ class to Lua, you had to manually maintain the PKG file, which is a nightmare. After 3.0, you will feel that life is easy.

Next I will discuss the specific practices.
1. Install the necessary libraries and toolkit, and configure the relevant environment variables, please follow the cocos2d-x-3.0rc0 \ tools \ tolua \ readme. mdown To Do, Do not repeat.

2, write c ++ class (I tested using cocos2d-x-3.0rc0 \ tests \ LUA-empty-test \ project \ Classes \ helloworldscene. cpp)

3. Write a generated Python script. You won't write it. It doesn't matter. We will show it as a cat or a tiger.
1) enter the directory cocos2d-x-3.0rc0 \ tools \ tolua, copy a copy of genbindings. py, named genbindings_myclass.py
2) Create the generated directory in our project, open genbindings_myclass.py and

?
1 output_dir = ‘%s/cocos/scripting/lua-bindings/auto‘ % project_root

Change

?
1 output_dir = ‘%s/tests/lua-empty-test/project/Classes/auto‘ % project_root

3) modify the command parameters and set

?
1234567 cmd_args = {‘cocos2dx.ini‘ : (‘cocos2d-x‘, ‘lua_cocos2dx_auto‘), \                    ‘cocos2dx_extension.ini‘ : (‘cocos2dx_extension‘, ‘lua_cocos2dx_extension_auto‘), \                    ‘cocos2dx_ui.ini‘ : (‘cocos2dx_ui‘, ‘lua_cocos2dx_ui_auto‘), \                    ‘cocos2dx_studio.ini‘ : (‘cocos2dx_studio‘, ‘lua_cocos2dx_studio_auto‘), \                    ‘cocos2dx_spine.ini‘ : (‘cocos2dx_spine‘, ‘lua_cocos2dx_spine_auto‘), \                    ‘cocos2dx_physics.ini‘ : (‘cocos2dx_physics‘, ‘lua_cocos2dx_physics_auto‘), \                    }

Change

?
1 cmd_args = {‘myclass.ini‘ : (‘myclass‘, ‘lua_myclass_auto‘) }

4) at this time, you may ask where myclass. INI is. Let's write this file. The same principle is true. I still use cocos2dx_spine.ini to change it.

?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 [myclass]# the prefix to be added to the generated functions. You might or might not use this in your own# templatesprefix = myclass  # create a target namespace (in javascript, this would create some code like the equiv. to `ns = ns || {}`)# all classes will be embedded in that namespacetarget_namespace =  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/includeandroid_flags = -D_SIZE_T_DEFINED_   clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include clang_flags = -nostdinc -x c++ -std=c++11  cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/2d -I%(cocosdir)s/cocos/base -I%(cocosdir)s/cocos/ui -I%(cocosdir)s/cocos/physics -I%(cocosdir)s/cocos/2d/platform -I%(cocosdir)s/cocos/2d/platform/android -I%(cocosdir)s/cocos/math/kazmath -I%(cocosdir)s/extensions -I%(cocosdir)s/external -I%(cocosdir)s/cocos/editor-support -I%(cocosdir)s  cocos_flags = -DANDROID -DCOCOS2D_JAVASCRIPT  cxxgenerator_headers =  # extra arguments for clangextra_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   # what headers to parseheaders = %(cocosdir)s/tests/lua-empty-test/project/Classes/HelloWorldScene.h  # what classes to produce code for. You can use regular expressions here. When testing the regular# expression, it will be enclosed in "^$", like this: "^Menu*$".classes = HelloWorld  # what should we skip? in the format ClassName::[function function]# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also# regular expressions, they will not be surrounded by "^$". If you want to skip a whole class, just# add a single "*" as functions. See bellow for several examples. A special class name is "*", which# will apply to all class names. This is a convenience wildcard to be able to skip similar named# functions from all classes.  skip =  rename_functions =  rename_classes =  # for all class names, should we remove something when registering in the target VM?remove_prefix =  # classes for which there will be no "parent" lookupclasses_have_no_parents =  # base classes which will be skipped when their sub-classes found them.base_classes_to_skip = Ref ProcessBase  # classes that create no constructor# Set is special and we will use a hand-written constructorabstract_classes =  # Determining whether to use script object(js object) to control the lifecycle of native(cpp) object or the other way around. Supported values are ‘yes‘ or ‘no‘.script_control_cpp = no

Pay attention to these lines when you change them.

?
1234567 [myclass]prefix = myclasstarget_namespace =headers = %(cocosdir)s/tests/lua-empty-test/project/Classes/HelloWorldScene.hclasses = HelloWorldskip =abstract_classes =

4, the following to automatically generate the code, open the command line tool, CD to cocos2d-x-3.0rc0 \ tools \ tolua

?
1 python genbindings_myclass.py

Press enter to run. If there is no problem before you will be in the cocos2d-x-3.0rc0 \ tests \ LUA-empty-test \ project \ classes with a folder auto, and then generate the inside lua_myclass_auto.cpp and lua_myclass_auto.hpp add drag such as Project

5. Add the module we generated to Lua during Script Engine initialization.
Edit appdelegate. cpp, including the lua_myclass_auto.hpp header file, in

?
1 LuaEngine* engine = LuaEngine::getInstance();

Add later

?
1 register_all_myclass(engine->getLuaStack()->getLuaState());


6. Compile and run the program. In this way, the helloworld class will be exported to Lua.

Test ------------------------------------------------
Open hello. Lua and edit the local function main ().
Change the preceding content

?
123456789101112131415 local function main()    -- avoid memory leak    collectgarbage("setpause", 100)    collectgarbage("setstepmul", 5000)     local hello = HelloWorld:create()    local sceneGame = cc.Scene:create()    sceneGame:addChild(hello)    cc.Director:getInstance():runWithScene(sceneGame)     if(1==1) then        return    end…………

Cocos2dx3.0 detailed steps for exporting custom classes to Lua

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.