之前一直是用C/C++写代码,lua嘛,东弄弄西搞搞,也看了许多乱七八糟的东西。
介绍
先看一段LuaTest的项目中AppDelegate的一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| AppDelegate::applicationDidFinishLaunching() {
LuaEngine* pEngine = LuaEngine::getInstance(); ScriptEngineManager::getInstance()->setScriptEngine(pEngine);
pEngine->executeScriptFile("src/controller.lua");
return true; }
|
看了Lua项目的AppDelegate也自然会对Lua有了初步的了解。接下来,我们看看和Lua相关的一些文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| cocos/2d/script-support/CCScriptSupport.h cocos/2d/script-support/CCScriptSupport.cpp ```
接着便是`cocos/scripting/lua-bindings/manual`下的目录结构(略去同名cpp、mm、c文件)
```bash ├── CCBProxy.h ├── CCLuaBridge.h ├── CCLuaEngine.h ├── CCLuaStack.h ├── CCLuaValue.h ├── Cocos2dxLuaLoader.h ├── LuaBasicConversions.h ├── LuaOpengl.h ├── LuaScriptHandlerMgr.h ├── LuaSkeletonAnimation.h ├── Lua_web_socket.h ├── lua_cocos2dx_coco_studio_manual.hpp ├── lua_cocos2dx_deprecated.h ├── lua_cocos2dx_extension_manual.h ├── lua_cocos2dx_manual.hpp ├── lua_cocos2dx_physics_manual.hpp ├── lua_cocos2dx_spine_manual.hpp ├── lua_cocos2dx_ui_manual.hpp ├── lua_debugger.h ├── lua_extensions.h ├── lua_xml_http_request.h ├── platform │ ├── android │ │ ├── CCLuaJavaBridge.h │ │ └── jni │ │ └── Java_org_cocos2dx_lib_Cocos2dxLuaJavaBridge.h │ └── ios │ ├── CCLuaObjcBridge.h └── tolua_fix.h
|
- 所有
lua_开头的.h和.cpp文件都是将本地方法绑定注册到lua的,这些一组组的就是一个一个模块撒。
这些文件都是python文件生成的,具体可见项目LUAPROJ/frameworks/cocos2d-x/tools/
PS : 可见 LuaStack::init()
- 值得注意的是
platform文件夹下的CCLuaXXXXBridge,这些文件实则大大方便了我们添加自定义本地方法(cpp中的函数)到lua中。
CCLuaBridge CCLuaStack CCLuaValue CCLuaEngine这几个则是对lua的lua_isXXXXX,lua_toXXXX,lua_pushXXXX等一些API进行二次封装。
lua – c库
cocos2dx 3.0 – lua c库
lua.h
lauxlib.h – 辅助库
cocos2dx中绑定c++函数
先贴上一些文章:
Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
cocos2dx 2.x – tolua++
- 需要根据.h编写.pkg文件和一份桥接h和.pkg
- 用tolua++生成对应.cpp文件
- 最后在AppDelegate.cpp中调用
若有改动需要再次编写pkg文件,较为繁琐
cocos2dx 3.x – generator.py & genbindings.py
- 配置/frameworks/cocos2d-x/tools/tolua/XXXXXX.ini
- 在AppDelegate.cpp中加入注册代码
PS : 本质还是调用了tolua++,相对于直接使用tolua++来说比较方便。
generator.py
待定
genbindings.py
待定
tolua++
参考文章:
tolua++实现分析
源码分析
待定(2500行代码左右,正在看中)
cocos2dx 3.0 – tolua++中文注释