zoukankan      html  css  js  c++  java
  • cocos2d(x) HTML label ;CCHTML CCHTMLLabel

    
    

     这几天由于特殊需要,写了一个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>你到底
    吃不吃?</a>
    您的金钱:<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内容,回调函数,回调函数的监听内容。



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


  • 相关阅读:
    情感成本
    已知二叉树前序和中序,求后序
    贫穷的本质
    Centos安装docker及常见docker容器创建脚本
    SpringBoot与SpringCloud对应版本及官方查询方法
    工作流
    Host 'xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
    list_layout.ini说明
    layout.ini说明
    config.ini说明
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3186837.html
Copyright © 2011-2022 走看看