之前一直是用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()
{
/**************************/
/* 略去Director相关初始化 */
/**************************/
/* 对Cocos2dx的函数进行注册 */
LuaEngine* pEngine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(pEngine);
/********************/
/* 此处略去资源加载 */
/********************/
/* 执行Lua的入口 */
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的,这些一组组的就是一个一个模块撒。LUAPROJ/frameworks/cocos2d-x/tools/platform文件夹下的CCLuaXXXXBridge,这些文件实则大大方便了我们添加自定义本地方法(cpp中的函数)到lua中。CCLuaBridge CCLuaStack CCLuaValue CCLuaEngine这几个则是对lua的lua_isXXXXX,lua_toXXXX,lua_pushXXXX等一些API进行二次封装。先贴上一些文章:
Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
若有改动需要再次编写pkg文件,较为繁琐
PS : 本质还是调用了tolua++,相对于直接使用tolua++来说比较方便。
待定
待定
参考文章:
(削除) 待定(2500行代码左右,正在看中) (削除ここまで)