quick-cocos2d-x游戏开发【4】——添加文本

来源:互联网 发布:淘宝 新增网站推广 编辑:程序博客网 时间:2024/05/22 14:04

文本的添加在quick中被封装在ui类中,它可以创建EditBox,菜单以及文本,文本总得来说可以创建TTF和BMFont两种。


api对于它的说明很详细,ui.newBMFontLabel(params),参数中

  • text: 要显示的文本
  • font: 字体文件名
  • align: 文字的水平对齐方式(可选)
  • x, y: 坐标(可选)
所以我们创建一个文本可以使用这样的代码,

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. function MyScene:ctor()  
  2.     local labelBMFont = ui.newBMFontLabel({  
  3.         text = "Hello Cocos2dx",  
  4.         font = "futura-48.fnt",  
  5.         align = ui.TEXT_ALIGN_CENTER,  
  6.         x = display.cx,  
  7.         y = display.cy  
  8.     })  
  9.     self:addChild(labelBMFont)  
  10. end  

效果如下,



align参数相当于锚点的作用,默认quick中创建出来的都是靠左,所以经常会用到align = ui.TEXT_ALIGN_CENTER。

注意参数给的名称不可以修改,否则quick认不出参数,就会报错。既然前面说了quick是对cocos2d-x 原生lua的再封装,咱们就再看看这个newBMFontLabel是如何实现的,贴一下ui中的代码,

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. function ui.newBMFontLabel(params)  
  2.     assert(type(params) == "table",  
  3.            "[framework.ui] newBMFontLabel() invalid params")  
  4.   
  5.     local text      = tostring(params.text)  
  6.     local font      = params.font  
  7.     local textAlign = params.align or ui.TEXT_ALIGN_CENTER  
  8.     local x, y      = params.x, params.y  
  9.     assert(font ~= nil, "ui.newBMFontLabel() - not set font")  
  10.   
  11.     local label = CCLabelBMFont:create(text, font, kCCLabelAutomaticWidth, textAlign)  
  12.     if not label then return end  
  13.   
  14.     if type(x) == "number" and type(y) == "number" then  
  15.         label:setPosition(x, y)  
  16.     end  
  17.   
  18.     if textAlign == ui.TEXT_ALIGN_LEFT then  
  19.         label:align(display.LEFT_CENTER)  
  20.     elseif textAlign == ui.TEXT_ALIGN_RIGHT then  
  21.         label:align(display.RIGHT_CENTER)  
  22.     else  
  23.         label:align(display.CENTER)  
  24.     end  
  25.   
  26.     return label  
  27. end  


可以看到还是使用了cocos2dx创建BMFont的方法——CCLabelBMFont:create(text, font, kCCLabelAutomaticWidth, textAlign),所以如果你觉得quick哪个参数看得不爽,你把它修改了,那么创建的时候就可以按自己喜欢的字段来了,当然这是不建议的。


另一种是TTF,ui.newTTFLabel(params),它可用的参数非常多,

  • text: 要显示的文本
  • font: 字体名,如果是非系统自带的 TTF 字体,那么指定为字体文件名
  • size: 文字尺寸,因为是 TTF 字体,所以可以任意指定尺寸
  • color: 文字颜色(可选),用 ccc3() 指定,默认为白色
  • align: 文字的水平对齐方式(可选)
  • valign: 文字的垂直对齐方式(可选),仅在指定了 dimensions 参数时有效
  • dimensions: 文字显示对象的尺寸(可选),使用 CCSize() 指定
  • x, y: 坐标(可选)

align 和 valign 参数可用的值:

  • ui.TEXT_ALIGN_LEFT 左对齐
  • ui.TEXT_ALIGN_CENTER 水平居中对齐
  • ui.TEXT_ALIGN_RIGHT 右对齐
  • ui.TEXT_VALIGN_TOP 垂直顶部对齐
  • ui.TEXT_VALIGN_CENTER 垂直居中对齐
  • ui.TEXT_VALIGN_BOTTOM 垂直底部对齐
我们也简单写个

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. function MyScene:ctor()  
  2.     local labelTTF = ui.newTTFLabel({  
  3.         text = "Hello Cocos2dx",  
  4.         size = 30,  
  5.         color = ccc3(255, 255, 0),  
  6.         align = ui.TEXT_ALIGN_CENTER,  
  7.         x = display.cx,   
  8.         y = display.cy  
  9.   
  10.     })  
  11.     self:addChild(labelTTF)  
  12.   
  13. end  

效果如下,



关于quick对于TTF是如何实现的源码我就不贴出来了,大家可以自己翻出来看看。


此外,在api中还提供了两种TTF格式的字体创建,

ui.newTTFLabelWithShadow(params)

ui.newTTFLabelWithOutline(params)

这两个分别是带有阴影和描边参数的TTF字体,cocos2dx中一样提供这个功能,所以在quick里简单知道一下就ok,写个效果出来看看

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. local labelTTF = ui.newTTFLabelWithOutline({  
  2.         text = "Hello Cocos2dx",  
  3.         size = 50,  
  4.         color = ccc3(255, 0, 0),  
  5.         align = ui.TEXT_ALIGN_CENTER,  
  6.         x = display.cx,   
  7.         y = display.cy,  
  8.         outlineColor = ccc3(255, 255, 0)  
  9.     })  
  10.     self:addChild(labelTTF)  

效果如下,



label基本就是这样了,原生的还有一个Atlas,在游戏中做数字标签还是很常用的~

0 0
原创粉丝点击