C++与Lua进数据交换的工具函数

xiaoxiao2021-02-28  105

1)tolua.type 返回一个 C++ 对象的类型描述字符串

格式: self.studio.layout = cc.CSLoader:createNode(GAMETABLE_CSB); print(tolua.type(self.studio.layout))               -- 输出 cc.Node

2)tolua.cast 强制转换对象类型

格式: tolua.cast(对象, 类型名称)~~

3)tolua.isnull 检查指定 Lua 值中保存的 C++ 对象是否已经被删除。

我们在将 C++ 对象保存到 Lua 值后。只要还有 Lua 代码在使用这些值,那么即使 C++ 对象已经被删除了,但 Lua 值仍然会存在。如果此时调用 Lua 值的方法就会出错。

因此可以用 tolua.isnull() 检查 Lua 值中的 C++ 对象是否已经被删除。

已删除 返回 true  没有被删除 返回 false

同时,还要注意一个问题,C/C++分配的内存在Lua中表现为一个userdata类型,且这个类型不受Lua垃圾回收机制的管理,所以有时成员变量已经移除了,但是这个类型没有回收

if self.btnLayer then self.btnLayer:removeFromParent() self.btnLayer = nil end local btnLayer = createBtnLayer(btnInfo); btnLayer:setLocalZOrder(Cur_Max_Z_Order); btnLayer:setName("isHaveBtnLayer") self.btnLayer = btnLayer self:addChild(btnLayer);

其中createBtnLayer是一个Layer层,在Layer层中点击一个按钮是已经移除,可是self.btnLayer还是存在

这是在移除Layer层之前,把self.btnLayer = nil 这时才没有问题

转载请注明原文地址: https://www.6miu.com/read-20931.html

最新回复(0)