Cocos2dx-lua luabindings 示例
来源:互联网 发布:斯坦福商学院知乎 编辑:程序博客网 时间:2024/05/21 00:44
我觉得学习cocosLua的luabindings是一个重要的难点,而且这方面的资源也少,不过还好,找了些视频教程,自己也动手配置了下,两天时间终于搞出来了。
1. 编辑Hello.h文件 , 保存到目录:项目路径/frameworks/cocos2d-x/cocos/my, my是自己新建的目录,存放luabindings的c++部分代码
#ifndef __HELLO__#define __HELLO__#include "cocos2d.h"namespace cocos2d{class Hello: public Ref{public:virtual bool init(){return true;}CREATE_FUNC(Hello);void sayHello(){log("Hello Cocos Lua...");}Hello(){};~Hello(){};};};#endif
[cocos2dx_hello]# the prefix to be added to the generated functions. You might or might not use this in your own# templatesprefix = cocos2dx_hello# 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 = ccandroid_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/includeandroid_flags = -D_SIZE_T_DEFINED_clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include#clang_flags = -nostdinc -x c++ -std=c++11clang_flags = -nostdinc -x c++ -std=c++11 -U __SSE__cocos_headers = -I%(cocosdir)s/cocos -I%(cocosdir)s/my -I%(cocosdir)s/cocos/base -I%(cocosdir)s/cocos/platform/androidcocos_flags = -DANDROIDcxxgenerator_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/cocos/my/Hello.h#headers = /Users/Jacky/Workspace/CocosLuaBinding/frameworks/runtime-src/Classes/CustomClass.hclasses = Hello.*skip =rename_functions =rename_classes =remove_prefix =classes_have_no_parents =base_classes_to_skip =abstract_classes =script_control_cpp = no
[cocos2dx_hello]:之前是cocos2dx_****
prefix = cocos2dx_hello:
clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include,注意ndk的版本号,这个不对的话可能会报错
clang_flags = -nostdinc -x c++ -std=c++11 -U __SSE__,-U __SSE__是新加的,不加可能会报错
classes = Hello.*
headers = %(cocosdir)s/cocos/my/Hello.h,指向刚新加的C++文件
3.修改 项目路径/frameworks/cocos2d-x\tools\tolua\genbindings.py
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'), \ 'cocos2dx_experimental_video.ini' : ('cocos2dx_experimental_video', 'lua_cocos2dx_experimental_video_auto'), \ 'cocos2dx_experimental.ini' : ('cocos2dx_experimental', 'lua_cocos2dx_experimental_auto'), \ 'cocos2dx_controller.ini' : ('cocos2dx_controller', 'lua_cocos2dx_controller_auto'), \ 'cocos2dx_cocosbuilder.ini': ('cocos2dx_cocosbuilder', 'lua_cocos2dx_cocosbuilder_auto'), \ 'cocos2dx_cocosdenshion.ini': ('cocos2dx_cocosdenshion', 'lua_cocos2dx_cocosdenshion_auto'), \ 'cocos2dx_3d.ini': ('cocos2dx_3d', 'lua_cocos2dx_3d_auto'), \ 'cocos2dx_audioengine.ini': ('cocos2dx_audioengine', 'lua_cocos2dx_audioengine_auto'), \ 'cocos2dx_csloader.ini' : ('cocos2dx_csloader', 'lua_cocos2dx_csloader_auto'), \ 'cocos2dx_experimental_webview.ini' : ('cocos2dx_experimental_webview', 'lua_cocos2dx_experimental_webview_auto'), \ 'cocos2dx_physics3d.ini' : ('cocos2dx_physics3d', 'lua_cocos2dx_physics3d_auto'), \ 'cocos2dx_navmesh.ini' : ('cocos2dx_navmesh', 'lua_cocos2dx_navmesh_auto'), \ 'cocos2dx_hello.ini' : ('cocos2dx_hello', 'lua_cocos2dx_hello_auto'), \ }
在最后一行新加一行:'cocos2dx_hello.ini' : ('cocos2dx_hello', 'lua_cocos2dx_hello_auto'), \
运行此文件:python genbindings.py. 各种报错啊,首先需要下载两个python的模块PyYAML,Cheetah, 还需要Android NDK,全都重装了一遍,
python与PyYAML需要32位的
python2.7: http://pan.baidu.com/s/1skMX8rN
PyYAML-3.12.win32-py2.7: http://pan.baidu.com/s/1eSOWhd4
Cheetah-2.0.1: http://pan.baidu.com/s/1slUFsx3
NDK为android-ndk-r9b 64位版本
查看NDK llvm版本
就使用标注的版本吧
修改genbindings.py文件中llvm版本:
再重新运行文件:
运行成功,在 项目路径/frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto生成两个文件
4.在项目的C++代码中注册luabindings
1)打开lua_module_register.h
#ifndef __LUA_TEMPLATE_RUNTIME_FRAMEWORKS_RUNTIME_SRC_CLASSES_LUA_MODULE_REGISTER_H__#define __LUA_TEMPLATE_RUNTIME_FRAMEWORKS_RUNTIME_SRC_CLASSES_LUA_MODULE_REGISTER_H__#include "lua.h"#include "scripting/lua-bindings/manual/Lua-BindingsExport.h"CC_LUA_DLL int lua_module_register(lua_State* L);#endif // __LUA_TEMPLATE_RUNTIME_FRAMEWORKS_RUNTIME_SRC_CLASSES_LUA_MODULE_REGISTER_H__
lua_module_register这个方法就是注册luabindings的方法,不过这个方法已经在libluacocos2dx库中实现了,不能再向这个方法里加东西了。那就只能改调用了,此方法是在AppDelegate.cpp中调用的
2)创建一个新的注册方法
替换注册函数
5. vs2013编译项目
报出打不到头文件错误:
引入头文件目录
再报找不到链接错误
将cpp文件加入到工程中
再编译,则编译成功
6. 在lua中调用C++代码,main.lua
sublime text中F7运行(我已配置好sublime对cocoslua的运行环境)
到此,luabindings终于搞定!!!
- Cocos2dx-lua luabindings 示例
- cocos2dx-lua 示例运行
- cocos2dx c++、lua listView创建示例
- cocos2dx lua
- cocos2dx+lua
- cocos2dx-lua
- Cocos2dx lua
- [cocos2dx lua]cocos2dx lua入门
- quick-cocos2dx cocos2dx.lua
- lua: cocos2dx lua 加密
- [cocos2dx-lua]cocos2dx-lua环境搭建
- [cocos2dx-lua]"Hello Lua"分析
- cocos2dx lua自定义lua-binding
- cocos2dx 3.1.x lua mvc代码修改成官方代码示例
- cocos2dx 3.15 视频播放实现 lua 以及c++ 版本VideoPlayer的使用注意 与详细示例
- lua+cocos2dx飞镖怪物
- Cocos2dx+lua基础ccb
- cocos2dx的lua绑定
- 关于spring cloud
- iOS 你需要知道的团队代码规范,个人更应该规范
- POJ 1182 食物链
- i2ctools在android中的编译及使用
- LGV30的到来,是否能一雪前耻盖过三星呢?看到这个你就知道了!
- Cocos2dx-lua luabindings 示例
- Codeforces Round #430 (Div. 2)-搜索&STL-Ilya And The Tree
- MyBatis笔记二
- Android中svg动画框架PathView的使用
- AndroidStudio 自动导入内部类
- 分组取每组前几条记录(排名) 附group by与order by的研究
- 移动端网页纯原生js选项卡tab切换
- qt中用异或加密解密
- jQuery:多个AJAX/JSON并行请求对应一个回调函数处理方法$.when