使用 display.newColorLayer 时,发现设置了setContentSize() 改变不了ColorLayer 的大小。
源码在处理的时候有这么一句话,node.setContentSize = layer.setContentSize 。
然后写了俩测试node ,来试验一下,这个具体的作用。
--node
local testnode = class("testnode", function ()
return display.newNode()
end)
function testnode:ctor()
self.index = 0
end
function testnode:test()
print("testnode")
self:to()
end
function testnode:to()
print("node to")
print(self.index)
end
return testnode
--layer
local testlayer = class("testlayer", function ()
return cc.LayerColor:create(cc.c4b(120,0,120,255))
end)
function testlayer:ctor()
self.index = 1
end
function testlayer:test()
print("testlayer")
self:to()
end
function testlayer:to()
print("layer to")
print(self.index)
end
return testlayer
--测试
local node = testnode.new()
local layer = testlayer.new()
layer:addTo(node)
node:addTo(self)
node:test()
layer:test()
node.test = layer.test
node:test()
测试的结果,是执行 node.test = layer.test这句话后,
node:test()的输出结果是,
testlayer
node to
0
程序先执行了,layer的test,但是self指向的确是node自己,所以在layer的test函数中,调用的self:to 是调用的node 的to函数,打印的也是node.index。
所以最开始设置node的setContentSize实际最后改变的是node 自己的width,height 的值。ColorLayer的值是没有改变的。
翻看quick 3.5的源码,修复了这个bug,如下:
node.setContentSize = function(_, ...)
layer:setContentSize(...)
end
node.getContentSize = function()
return layer:getContentSize()
end