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

前端之家收集整理的这篇文章主要介绍了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。

原文链接:https://www.f2er.com/cocos2dx/341714.html

猜你在找的Cocos2d-x相关文章