文本的添加在quick中被封装在ui类中,它可以创建EditBox,菜单以及文本,文本总得来说可以创建TTF和BMFont两种。
api对于它的说明很详细,ui.newBMFontLabel(params),参数中
function MyScene:ctor() local labelBMFont = ui.newBMFontLabel({ text = "Hello Cocos2dx", font = "futura-48.fnt", align = ui.TEXT_ALIGN_CENTER, x = display.cx, y = display.cy }) self:addChild(labelBMFont) end
align参数相当于锚点的作用,默认quick中创建出来的都是靠左,所以经常会用到align = ui.TEXT_ALIGN_CENTER。
注意参数给的名称不可以修改,否则quick认不出参数,就会报错。既然前面说了quick是对cocos2d-x 原生lua的再封装,咱们就再看看这个newBMFontLabel是如何实现的,贴一下ui中的代码,
function ui.newBMFontLabel(params) assert(type(params) == "table", "[framework.ui] newBMFontLabel() invalid params") local text = tostring(params.text) local font = params.font local textAlign = params.align or ui.TEXT_ALIGN_CENTER local x, y = params.x, params.y assert(font ~= nil, "ui.newBMFontLabel() - not set font") local label = CCLabelBMFont:create(text, font, kCCLabelAutomaticWidth, textAlign) if not label then return end if type(x) == "number" and type(y) == "number" then label:setPosition(x, y) end if textAlign == ui.TEXT_ALIGN_LEFT then label:align(display.LEFT_CENTER) elseif textAlign == ui.TEXT_ALIGN_RIGHT then label:align(display.RIGHT_CENTER) else label:align(display.CENTER) end return label end
另一种是TTF,ui.newTTFLabel(params),它可用的参数非常多,
align 和 valign 参数可用的值:
function MyScene:ctor() local labelTTF = ui.newTTFLabel({ text = "Hello Cocos2dx", size = 30, color = ccc3(255, 255, 0), align = ui.TEXT_ALIGN_CENTER, x = display.cx, y = display.cy }) self:addChild(labelTTF) end
关于quick对于TTF是如何实现的源码我就不贴出来了,大家可以自己翻出来看看。
此外,在api中还提供了两种TTF格式的字体创建,
ui.newTTFLabelWithShadow(params)
ui.newTTFLabelWithOutline(params)
这两个分别是带有阴影和描边参数的TTF字体,cocos2dx中一样提供这个功能,所以在quick里简单知道一下就ok,写个效果出来看看
local labelTTF = ui.newTTFLabelWithOutline({ text = "Hello Cocos2dx", size = 50, color = ccc3(255, 0, 0), align = ui.TEXT_ALIGN_CENTER, x = display.cx, y = display.cy, outlineColor = ccc3(255, 255, 0) }) self:addChild(labelTTF)
label基本就是这样了,原生的还有一个Atlas,在游戏中做数字标签还是很常用的~