使用了 TestLua Demo中资源中的extern.lua 的class 方法做类的继承
在脚本CardListLayer.lua 中 自定义自己的类:
require("extern")
– 创建层
local CardListLayer = class(“CardListLayer”)
CardListLayer.__index = CardListLayer
cocos2d-x use tolua++ to export lua interface, for every c++ object exist in lua is userdata,
in lua 5.1 userdata can associate a private table call “environment”,
tolua++ use this feature to store data for every object. when you index the object,
it will find in “environment” first.
–]]
– 层 CardBagLayer 继承 CCLayer
function CardListLayer.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, CardListLayer)
return target
end
– overwrite
function CardListLayer:init()
– do samething my init()
return true
end
– create object
function CardListLayer.create()
local layer = CardListLayer.extend(CCLayer:create())
if nil ~= layer then
layer:init()
end
return layer
end
return CardListLayer
<p> </p>
<span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:16px;line-height:24px;background-color:#f5f5f5;">在另一个脚本中调用时</span><br style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:16px;line-height:24px;background-color:#f5f5f5;" />
<p></p>
<p><span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:16px;line-height:24px;background-color:#f5f5f5;"><pre class="brush:lua; toolbar: true; auto-links: false;"> local pLayer = OpenLua("CCardBagLayer") --
local cardListLayer = pLayer:create()
print(type(cardListLayer))
this.layer.addChild(cardListLayer)
其中OpenLua(FileName)
function OpenLua(FileName)
return require(CFileName)
end
```
打印出来的 local cardListLayer = pLayer:create() 的类型为 userdata 但在this.layer.addChild(cardListLayer) 报 :error in function 'addChild'. argument #2 is ''; 'CCNode' expected
我的继承方法错了吗 ? 还是有哪地方方法不对 ?对比了TestLua中的 ExtensionTest.lua的
TableViewTestLayer 中的Demo 好像区别只在生成对象在脚本内(TestLua)及另一脚本(我的) 是我返回值有问题吗? 求分析.谢谢
<p> </p>
<br />
</span></p>
</p>
<p><span style="color:#333333;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:16px;line-height:24px;background-color:#f5f5f5;"><br />
</span></p>