这几天由于特殊需要,写了一个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. <转>如何利用socket进行HTTP访问

    原文:<转>如何利用socket进行HTTP访问 如何利用socket进行HTTP访问 平常我们要访问某个URL一般都是通过浏览器进行:提交一个URL请求后,浏览器将请求发向目标服务器或者 ...

  2. HTML5 五彩圆环Loading加载动画实现教程

    原文:HTML5 五彩圆环Loading加载动画实现教程 今天我们要来介绍一款效果很特别的HTML5 Loading加载动画,不像其他的Loading动画,这款Loading动画颜色很丰富,并且在转圈 ...

  3. Java小知识点学习--------数组和位运算小知识点

    位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2;  此时两个数组变量都会同一时 ...

  4. Asp.Net MVC路由调试好帮手RouteDebugger

    Asp.Net MVC路由调试好帮手RouteDebugger 1.获取方式 第一种方法: 在程序包控制台中执行命令 PM> Install-Package routedebugger 安装成功 ...

  5. navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法

    原文:navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法 ...

  6. bootstrap基本标签总结2

    [布局]bootstrap基本标签总结2   缩略图 <div class="container"> <div class="row"> ...

  7. Linux下访问文件的基本模式

    源址:http://blogread.cn/it/article/6523?f=wb 访问文件的操作主要是指读文件和写文件,下文简单说明内核中几种常见的访问文件的方式. 普通模式 读写系统调用的默认方 ...

  8. CQRS架构如何实现高性能

    CQRS架构如何实现高性能 CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理. ...

  9. SQLServer通过链接服务器远程删除数据性能问题解决

    原文:SQLServer通过链接服务器远程删除数据性能问题解决 在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数 ...

  10. ubuntu下的apache的虚拟主机的配置

    ubuntu下的虚拟主机的配置相对window下的虚拟主机配置有些许不同. 对于要新建的虚拟主机,我们可以有如下几个步骤: 1.在/etc/apache2/sites-available/目录下新建一 ...