studio创建的node,不能被clone()

碰到一个比较郁闷的事情,为了在studio中复用,把一个控件用NODE创建了,但是在程序中用clone()函数,这个NODE死活克隆不了,请问大家有没有遇到过。

在线等

普通的node本来就不能clone,有什么奇怪的?

如果有复用的需要该怎么写呢,求指点…

继承了Clonable的类才能clone;或者自己实现clone方法。

好吧,还是老老实实从新读取好了…

官方为什么不提供一下呢?

有没人写好这个的clone,求观摩下,官方好像是没提供node的clone,在某些scroll view的情况下,不停读取解析ccs效率很低

可以试着 做json缓存啊 或者看看有没有接口

不clone ,你发现做大列表会很慢

clone是widget的方法,而不是node的方法,不能clone是因为你要clone的容器有不是widget的控件,最常见的就是直接把图片拖进去是精灵控件(sprite)而不是图像(imageView),改用图像控件就可以了。

这个怎么搞出来的?

我们是自己写了个函数,将node改为widget,就能clone了

function replaceNodeWithWidget(node)
local widget = ccui.Widget:create();
widget:setAnchorPoint(cc.p(node:getAnchorPoint()));
widget:setName(node:getName());
widget:setPosition(node:getPosition());
widget:setContentSize(node:getContentSize());
widget:setScaleX(node:getScaleX());
widget:setScaleY(node:getScaleY());
widget:setRotation(node:getRotationSkewX());

--将Node的孩子挂到widget上
local children = node:getChildren();
local len = table.getn(children)
for i = 0, len-1, 1 do
    local child = children*;
    child:retain();
    node:removeChild(child);
    widget:addChild(child);
    child:release();
end

--从父节点摘除
local parent = node:getParent();
local zOrder = node:getLocalZOrder();
if parent ~= nil then
    parent:addChild(widget, zOrder);
    parent:removeChild(node);
end

return widget;

end*

for i = 0, len-1, 1 do
local child = children*;
child:retain();
node:removeChild(child);
widget:addChild(child);
child:release();
end

给widget添加child的时候,不需要zOrder么*

请问这个问题解决了么?