cocos2d(x) HTML label ;CCHTML CCHTMLLabel

12 篇文章 0 订阅

Android版本CCHTMLLabel已经实现请移步:

http://blog.csdn.net/chenee543216/article/details/10411837

 这几天由于特殊需要,写了一个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,所以如果有必要应该也是可以搞定。

发现我想多了,人家cocos2d-x是直接通过JNI调用android的canvas来画的。这样的话省去移植libttf,也不用自己处理太底层的细节,难度应该会小很多。而且。。。相关代码肯定有现成的,所以,俺只好再一次站在巨人的肩膀上了委屈(真不要脸)。。。。这几天看有没有空实现一下吧,既然那么多人需求android的。。。。

总结:整个难度不大,主要是了解coreText或者trueType库java canvas的使用和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内容,回调函数,回调函数的监听内容。



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


---------接上: 最近事情太多,实在没有时间整理。有朋友等不及了,我就直接打包代码吧


补充一下:2.12的cocos2dx代码需要对CCImage增加一个函数来操作其private变量。


//这个是CCHTMLTabel中调用        
pImage->setPremultipliedAlpha(true);


//CCImage.h 120行添加实现

    void setPremultipliedAlpha(bool b) { m_bPreMulti = b;};


代码已经上传:求您们了,自己下载吧,别mail我了
http://download.csdn.net/detail/chenee543216/5763111


完整的xcode cocos2dx 2.12的项目源码,除去git,clean过了。只是Demo,代码可能有些乱。。。。 :)




补充:

TODO android实现

前面解析都一样,主要是Objective-C代码对C++的移植。然后JNI调用Android绘制相关Text的Canvas。。。。



  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值