这几天由于特殊需要,写了一个HTMLLabel。可以直接支持HTML的几种格式,<font> <a href> color size 等等。

参考object C的一个ios开源控件。根据需要集成到cocos2dx中CCLabelTTF中了。

实现方式是

1、解析html标签保存各个属性。

2、调用coreText来画字体。

3、计算trueType字体的大小,设置label尺寸属性。

4、计算url的位置,并且生成button结构体,保存图片的hotspots和相应URL

5、添加label的回调函数,应对不同的url的点击事件;

用途:

这个HTMLLabel在游戏中的用处很大,可以做聊天系统,也可以做消息系统。 比如WOW中 带颜色和超链接的喊话,点击其中的物件可以直接查看。。。

缺点:

由于实现是依赖coreText所以只支持ios,想要android的话,必须用libttf重写底层绘制部分。以前做MP4的时候定制过libtruetype的库,也写过基于frameBuffer的GUI sdk,所以如果有必要应该也是可以搞定。

总结:整个难度不大,主要是了解coreText或者trueType库的使用和ttf字体绘制细节。

  CCHTMLLabelTTF* pLabel2 = CCHTMLLabelTTF::create("Hllo,<font face='HelveticaNeue-CondensedBold' size=60 color='#00CC00'>先生</font>早上好,<a href='action=show'><font color='#FF00FF'>要吃点什么呢?</font>你到底\n吃不吃?</a>\n您的金钱:<a href='item=ID10086'><font color='#FF0000'>2000</font></a>", "Thonburi", 32);

    pLabel2->setAnchorPoint(ccp(0,1));
pLabel2->setPosition( ccp(300, 680) );
pLabel2->addCallBackListener(this, menu_selector(HelloWorld::labelCallback)); std::string str;
str.assign("action=show");
pLabel2->urls.push_back(str);
str.assign("item=ID10086");
pLabel2->urls.push_back(str); this->addChild(pLabel2, 1);
this->pLabel2 = (CCLabelTTF*)pLabel2;

以上为该label的初始化。包括html内容,回调函数,回调函数的监听内容。

代码较多,稍后整理再上传吧。。。,等不及的给我邮箱留言。


cocos2d(x) HTML label ;CCHTML CCHTMLLabel的更多相关文章

  1. cocos2dx lua

    对于游戏公司而言.採用游戏脚本lua.python等进行开发也非经常见,可是非常多童鞋对脚本并没有非常熟悉的概念,本篇则向大家简介脚本的用途以及在Cocos2dx基础使用方法: Lua和python这 ...

  2. cocos2d-x CC_SYNTHESIZE_READONLY

    //定义一个只读属性Label,在类定义中可以使用this->getLabel来访问     CC_SYNTHESIZE_READONLY(cocos2d::CCLabelTTF*,_label ...

  3. (15)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第三部分(完)

    引言 程序截图: 在第二部分教程中,Ray教大家如何在地图中制作可碰撞的区域,如何使用tile属性,如何制作可以拾取的物品以及如何动态修改地图.如何使用“Heads up display”来显示分数. ...

  4. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  5. cocos2d/x 自带字体(label)

    CCLabelTTF* label1 = CCLabelTTF::labelWithString("1掼蛋as", "AppleGothic", 15); la ...

  6. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  7. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  8. cocos2d学习笔记

    doxygen工具 生成cocos2d的api文档 位图字体编辑工具 Glyph Designer http://www.71squared.com/glyphdesigner  收费的 CCLabl ...

  9. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

随机推荐

  1. js 正则之检测素数

    原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...

  2. 为Pythonic论坛添加一个“专题”功能(续)

    上篇博文<为Pythonic论坛添加一个“专题”功能>,在模板的层次上对发帖进行了限制.也就是根据用户是否拥有权限来决定是否显示发帖框. 但是自从这么“投机取巧”的写完模板后,整夜辗转反侧 ...

  3. Spring AspectJ的Execution表达式-备忘笔记

    Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execu ...

  4. Android高效的应用程序开发工具集1---ant构建一个简单的Android工程

    在java编译那些事通过提到ant编译Java工程,如今扩大到用它来构建Android目,事实上道理是相通的.变化的仅仅是使用的形式.ant构建相比IDE的优点是多个子项目使用自己定义jar包时,an ...

  5. C# 语言的两个html解析器

    基于C# 语言的两个html解析器   基于C# 语言的两个html解析器 1)Html Agility Pack http://nsoup.codeplex.com/ 代码段示例: HtmlDocu ...

  6. How feedback work for your improvement

    Why generally feedback is the perspective from others for some event. In China there is story,some k ...

  7. SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏

    SignalR + KnockoutJS + ASP.NET MVC 实现井字游戏   1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实 ...

  8. c#事件求解

    闲来无聊对于clr一书又重新温习了下,但是看到事件这张后还是有很多的困惑,对于事件能力CLR是这样描述,通知其它对象发生特定的事情. 1.其它对象:是指对于事件的关注者 2.特定的事件:对于满足事件交 ...

  9. Google Offer的经历+内推

    8个月从CS菜鸟到拿到Google Offer的经历+内推 http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=77453 ...

  10. iOS基础 - 静态库

    一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系 ...