cocos lua 绑定感悟---各种表

1:tolua_super

tolua_super存在于注册表中,其中记录了各种类型的父类,key是类型的table,value是也是个<v_key,v_value>的表,v_key是父类的名字,value是1。在判断类型的时候,这个非常有用。

2:tolua_ubox

在注册表中和每种类型的表中都存在这样一张表,注册表是在 toluafix_open 中初始化的,而每种类型的tolua_ubox表示在该注册该类型的时候初始化的,请参考setbox函数,它要么是父类的tolua_ubox表,要么是重新创建一个新的弱值表,其中记录了ptr-->userdata,每当生成一个C++对象的时候,会生成一个lua层面的userdata,当下次压入时且类型是当前类型的子类,那么会去更新userdata的metatable为子类表

3:TOLUA_REFID_PTR_MAPPING,TOLUA_REFID_TYPE_MAPPING,TOLUA_VALUE_ROOT

这三个总是同时进行更新的,refid_ptr_map是id-->ptr的映射表,refid_type_map是id-->type的映射表,value_root_map是一个userdata-->ptr的映射表。在C++对象生成的时候,会对这三个表进行插入操作,当移除C++对象的时候会对这三个表进行删除操作。 这三个 表不是弱表

4:userdata

userdata是lua层面上的C++对象,它其实是个指针,指向的是真正C++对象的地址。userdata是在生成C++对象的时候压入到lua栈中的,详细 参考:tolua_pushusertype_internal,并且会把这个C++对象类型的表设置为userdata的元表,这个其实很有用。在判断lua传递数据到C++的userdata类型的时候,可以通过它的metatable,再根据metatable去注册表中拿到type,type就是它注册的C++类型。详细请参考
tolua_push.tolua_pushusertype_internal。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 07:38:06

cocos lua 绑定感悟---各种表的相关文章

cocos lua绑定感悟---tolua_isusertable及lua如何访问cocos静态函数的方法

现在还是个新手,对很多还不是很了解,所以语言估计会有点晦涩,望原谅啊!! <pre name="code" class="html">TOLUA_API int tolua_isusertable (lua_State* L, int lo, const char* type, int def, tolua_Error* err) { if (def && lua_gettop(L)<abs(lo)) return 1; if (l

cocos2d lua绑定感悟---像cc.Sprite,cc.Director这些是如何识别的

其实自从打开GameScene.lua文件以来,我一直都很想搞清楚的一个问题就是cc.Sprite这些是如何识别的.其实第一反应肯定就是:它肯定是一个全局变量,要不然怎么调用create方法呢.先不考究cocos的C++类方法是如何绑定到lua的,我就是想知道这个全局变量是什么时候注册的? 知道一点lua知识的都知道 lua里面的全局变量会保存到一个全局表_G中去,问题就转换为了 什么时候向_G中注册的?在使用cc.Sprite的create之前,我好像没有没有在lua中定义cc.Sprite这

(转载)我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类

我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类 热血枫叶2015-06-19 16:27:182289 次阅读 Cocos2d-x 2.x 与 Cocos2d-x 3.x 差异(tolua++) Cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从Cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++. bindings-generator脚本的工作机制是: 1.不用编写.

cocos2dx v3.x lua绑定分析

打算新项目转到cocos2dx v3上了,下载代码浏览过后发现改动真是非常大,结构性调整很多. 比如tolua绑定这一块,就几乎全翻新了. 胶水代码的生成,改成了全自动式的,通过clang来分析c++代码,可以准确的知道每一个类.函数.参数的信息,再也不用手动写pkg文件了. 运行期对象管理这块,似乎也有了不少改动,至少我原来的一些扩展代码运行不了了,还没来得及细看,待看完再一一录下. 先记录一下目前已看清楚的[类名表.类元表.对象实例]之间的关系: 1.类元表:最核心的表,在lua代码里是不可

【转】如何做dragonbones的lua绑定(VisualStudio)

原文:<如何做dragonbones的lua绑定(VisualStudio)>(不完善和错误的地方我已做红字修改) 最近好多同学在QQ群里问怎么在lua项目中使用DB(DrgonBones,龙骨),为了帮助更多的人,同时也好让更多的人跟容易使用DB,这里详细记录coco2dx-3.2版本对应DB的lua绑定. 首先要说明下,本文章对应的cocos2dx-3.2版本,其他cocos2dx-3.x版本跟3.2版本类似.这里假设自己使用cocos命令行创建的lua项目,而且没有修改过目录结构,如果修

【转】如何做dragonbones的lua绑定(Android)

这篇写dragonbones的lua绑定之Android部分,不知道怎么在VS(Visual Studio)中绑定的话请看如何在lua项目中使用dragonbones.有了上篇的基础,这次再做Android就比较简单了.注意:ndk9b不能编译通过,我这里使用的是ndk9d,其他版面没有测试. 修改 Application.mk 文件路径:MyLuaGame/frameworks/runtime-src/proj.android/jni/Application.mk 添加预定义宏 APP_CPP

如何做dragonbones的lua绑定(mac)

部分文件需要如何做dragonbones的lua绑定(VisualStudio) 支持 a. 将dragonbones(cocos2d_libs), lua_dragonbones_auto.cpp,lua_dragonbones_auto.hpp(cocos2d_lua_bindings/auto)添加到工程 b.  cocos2d_libs/project/Build Settings/Search Paths/User Header Search Paths增加 $(SRCROOT)/..

Cocos2d-x v3.3 lua绑定c++类方法总结

网上有很多cocos2d-x lua绑定c++类的接口教程,这篇文章也是总结他们的经验. 其中重点参考了 http://cn.cocos2d-x.org/tutorial/show?id=1295, 整个过程步骤很详细,会比较傻瓜式,希望对新手读者入门有用. 教程基本环境: 1.使用引擎是v3.3 beta版本 2.开发环境:OSX Yosemite 3. Cocos code IDE 4. Xcode 6 1.在Mac上用Cocos code IDE 写lua还是比较便利的,我们用coco c

cocos2d-x lua绑定解析

花了几天时间看了下cocos2d-x lua绑定那块,总算是基本搞明白了,下面分三部分解析lua绑定: 一.lua绑定主要用到的底层函数 lua绑定其本质就是有一个公用的lua_Stack来进行C和Lua之间的值传递,在路径[项目根目录]\frameworks\cocos2d-x\external\lua\luajit\include下有个lua.h文件,大部分lua绑定底层函数以及相关的常量都在这里. 1.lua堆栈常量 #define LUA_REGISTRYINDEX (-10000) /