加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

quick-cocos2d-x踩坑记(2)

发布时间:2020-12-14 16:21:49 所属栏目:百科 来源:网络整理
导读:原文请猛戳,原文将不时更新: http://galoisplusplus.coding.me/blog/2015/01/04/quick-cocos2d-x-pitfalls/ CocoStudio的文字标签加描边后字体颜色会改变 现象 给CocoStudio的 UIText 对象加上描边后字体颜色也变掉了。 这个bug其实是2dx引擎的 CSLoader

原文请猛戳,原文将不时更新:
http://galoisplusplus.coding.me/blog/2015/01/04/quick-cocos2d-x-pitfalls/

CocoStudio的文字标签加描边后字体颜色会改变

现象

给CocoStudio的UIText对象加上描边后字体颜色也变掉了。
这个bug其实是2dx引擎的CSLoader的bug,CSLoader在解析包括UIText的UI组件、并设置它们相应的颜色时,调用的都是nodesetColor,而非调用Label自身的setTextColor接口,这就导致了描边颜色和node颜色的混合。

建议

我用了如下的workaround去拿到编辑器中设置的字体颜色,并重置node本身的颜色:

function MyPackage.formatUIText(label,formatFunc)
    local color = label:getColor()
    color.a = 255
    label:setColor(cc.c3b(0xff,0xff,0xff))
    label:setTextColor(color)
    formatFunc(label)
end

这样就可以用来正常设置描边了,例如:

MyPackage.formatUIText(testLabel,function(label)
label:setOutline(cc.color.BLUE,2)
end)

当UI的字体较多时,对每一个UIText都调用一遍MyPackage.formatUIText去加同样的描边显然不现实,所以我又加了一个接口:

--[[
format all labels under root layout
]]
function MyPackage.formatAllLabels(layout,formatFunc)
    local children = layout:getChildren()
    local childCount = layout:getChildrenCount()
    if childCount < 1 then
        return
    end
    for i = 1,childCount do
        if tolua.type(children[i]) == "ccui.Text" then
            MyPackage.formatUIText(children[i],formatFunc)
        end
        MyPackage.formatAllLabels(children[i],formatFunc)
    end
end

NOTE:关于MyPackage请参见另一篇博文

quickx按钮显示异常

现象

quickx的按钮在某些清理TextureCache/SpriteFrameCache的情况下(例如在app切换到后台/收到内存警告时调用removeUnusedSpriteFrames/removeUnuserdTextures)会出现显示问题,一种常见的问题便是按钮的点击状态和正常状态的图片不同,在点击时按钮会消失不见。
这个现象的原因是quickx的UIButton实现只addChild了当前状态的sprite,其他状态的sprite未曾被retain,只是在状态切换时才动态生成,这就导致了非当前状态的Texture/SpriteFrame很可能会因为reference count(关于何为reference count可以参考本渣另一篇博文cocos2d-x V3.x内存管理分析)不大于1而被清理出内存。

建议

本渣改了quickx UIButton的内部实现,采用了类似2dx中Widgetccui.Button的方式,保证在初始化按钮时它的每个状态的sprite都被retain过。
本渣的改动请参考另一篇博文。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读