quick 3.3 display.newColorLayer setContentSize

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dd135373/article/details/50865331

使用 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

展开阅读全文

没有更多推荐了,返回首页