cocos2d-x Label不同文字不同颜色

前一段时间在cocos2d-x(3.7)项目中遇到一个需求要求实现Label中某些文字的高亮,也就是在一个Label中可以让文字有不同的颜色。看到这个需求我先是在网上找了很久都没有看到有用的信息,后来我就自己改造源码。
Label的原理基本是解析输入的字符串,然后根据字库信息解析字符串为每个字符生成一个对应的LetterInfo,最后根据LetterInfo信息将每个字符初始化一个Sprite(_reusedLetter)中,同时讲这个sprite绑定到_batchNodes(详细请参考Label::updateQuads)。
我改造Label源码的原理是在LetterInfo中添加了一个Color4B color记录每个字符的颜色,在Label中增加了一个颜色表和当前颜色。
struct LetterInfo
{
    char16_t utf16Char;
    bool valid;
    float positionX;
    float positionY;
    int atlasIndex;
    int lineIndex;
    Color4B color;//字符颜色
    bool bLockColor;//颜色锁,防止被setColor改变
};`

Label中添加`
public:
Color4B _curColor;//当前颜色
bool _bLockColor;//是否锁定
static std::vector colorList;//颜色表,size不要超过10
public:
static void setColorList(std::vector list);
static void addColor(Color3B color);
static std::vector getColorList();
static void clearColorList();
Label源码主要改动函数alignText,multilineTextWrapByWord,multilineTextWrapByChar和updateColor,详见我上传的Label源码资源(http://download.csdn.net/detail/xiaoshu_520/9621329
测试代码先设置Label颜色表
Label::addColor(Color3B(255,0,0));//红
Label::addColor(Color3B(255,255,128));//黄色

Label* lable1 = Label::create();
lable1->setString(“Test [c0]Label [/]Color”);
[c0]表示从这才开始后面的字符都是红色,直到[/]或者文本结束。
(颜色表中红色索引是0,黄色索引是1)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手机消除游戏是一种常见的益智类游戏,在cocos2d-x引擎下的实现可以分为以下几个步骤: 1. 创建游戏场景:在cocos2d-x中,可以通过创建一个Scene对象来表示游戏场景。可以在场景中添加游戏元素,如背景、按钮、精灵等。 2. 创建游戏元素:在手机消除游戏中,游戏元素通常是一些颜色相同的方块或球。在cocos2d-x中,可以通过创建一个Sprite对象来表示游戏元素。可以设置元素的位置、大小、纹理等属性,使其显示在游戏场景中。 3. 实现消除逻辑:在手机消除游戏中,玩家需要通过交换相邻的游戏元素,使得三个或三个以上颜色相同的元素连成一线,从而消除它们。在cocos2d-x中,可以通过监听玩家的操作,判断交换后是否有消除的元素,并更新游戏状态。 4. 实现计分和时间限制:在手机消除游戏中,通常会有计分和时间限制的要求。在cocos2d-x中,可以通过创建一个Label对象来显示当前分数和剩余时间,并在游戏进行过程中不断更新这些信息。 5. 添加音效和动画效果:为了增加游戏的趣味性和可玩性,可以在cocos2d-x中添加音效和动画效果。例如,当玩家消除一组元素时,可以播放消除音效和爆炸动画,增加游戏的视觉和听觉效果。 总的来说,手机消除游戏在cocos2d-x引擎下的实现需要涉及到场景的创建、游戏元素的创建和交互、消除逻辑的实现、计分和时间限制的处理,以及音效和动画效果的添加等方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值