原文请猛戳,原文将不时更新:
http://galoisplusplus.coding.me/blog/2015/01/04/quick-cocos2d-x-pitfalls/
CocoStudio的文字标签加描边后字体颜色会改变
现象
给CocoStudio的UIText
对象加上描边后字体颜色也变掉了。
这个bug其实是2dx引擎的CSLoader
的bug,CSLoader
在解析包括UIText
的UI组件、并设置它们相应的颜色时,调用的都是node
的setColor
,而非调用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中Widget
类ccui.Button
的方式,保证在初始化按钮时它的每个状态的sprite
都被retain
过。
本渣的改动请参考另一篇博文。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。