部分关键代码与思路参考 http://www.cocoachina.com/bbs/read.php?tid=218977&page=1
感谢原作者 i7909
代码下载地址:https://github.com/chenquanjun/Quick-x-RichLabel
----------------------
cocos2dx支持的文本显示模式比较单一,不支持图文混排与彩色文本。刚好项目要用到彩色文本,所以写了一个简单的类来实现
- 一、介绍
支持功能
1、图文混排
2、多彩文字混排,支持定义颜色,大小,字体等等属性
3、支持标签内嵌
4、支持自动换行
5、文字fadeIn动画效果(因为是单个字符创建成精灵,可扩展成各种动画效果)
6、支持改变文字,改变文字整体尺寸(其实是宽度)
用于聊天系统、公告或装备描述性文本块(抄原作者的话啦)
还可以用作人物对话,类似Galgame的人物对话(咳咳)
- 二、原理
1、字符串定义/规则
(1)彩色文本以[fontColor=xx]开头,[/fontColor]结尾,若要改变字体大小,字体类型等等,在开头框中加入对应的关键字(不需要加入关键字结尾),例如:
local str = "[fontColor=ff7f00 fontName=ArialRoundedMTBold fontSize = 30]测试[/fontColor]" --创建颜色为ff7f00,字体名为ArialRoundedMTBold,大小为30的测试 label
文本支持参数 fontColor, fontSize, fontName等等
(2)图片以[image=xx.png]开头,[/image]结尾,例如图片支持参数 image(必须), scale
local imageStr = "[image=test.png scale = 1.2][/image]" --创建文件名为test.png的精灵,大小为1.2
(3)支持图文混排,例如
local multiStr = "[fontColor=42426f]哈哈哈哈哈哈!![/fontColor][image=wsk1.png scale=1.3][/image]"
2、实现原理
(1)字符串解析
1.将字符串以标签头[]为关键字分隔字符串
local clumpheadTab = {} -- 标签头 --作用,取出所有格式为[xxxx]的标签头 for w in string.gfind(str, "%b[]") do if string.sub(w,2,2) ~= "/" then-- 去尾 table.insert(clumpheadTab, w) end end