码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)

时间:2016-03-13 06:05:09      阅读:464      评论:0      收藏:0      [点我收藏+]

标签:

执行后效果:

技术分享

 

前端使用:

技术分享

后台SuperRichText解析code

 

void SuperRichText::renderNode(tinyxml2::XMLNode *node){

    while (node!=nullptr) {

        if (node->ToText()) {

            CCLOG("文本信息:%s",node->ToText()->Value());

            

            auto n=node->ToText();

            std::u16string text;

            

            StringUtils::UTF8ToUTF16(n->Value(),text);

            

            std::u16string::size_type pos=0;

            pos=text.find(‘\n‘);

            while ((pos!=std::u16string::npos)) {

                text.erase(pos,1);

                pos=text.find(‘\n‘,pos);

            }

            

            pos=0;

            pos=text.find(‘\r‘);

            while ((pos!=std::u16string::npos)) {

                text.erase(pos,1);

                pos=text.find(‘\r‘,pos);

            }

            

            std::string utf8Text;

            StringUtils::UTF16ToUTF8(text,utf8Text);

            auto font=_fontList[_fontList.size()-1];

            auto textElement=ui::RichElementText::create(0,font.color,font.opacity,utf8Text,font.fontName,font.fontSize);

            

            _line->pushBackElement(textElement);

            

        }else if (node->ToElement()){

            auto n=node->ToElement();

            std::string name=n->Name();

            

            std::transform(name.begin(),name.end(),name.begin(),::toupper);

            

            if (name=="FONT") {

                CCLOG("字体标签");

                

                auto attr=n->FirstAttribute();

                FontInfo newFont=_fontList[_fontList.size()-1];

                while (attr!=nullptr) {

                    //遍历所有属性

                    std::string attrName=attr->Name();

                    std::transform(attrName.begin(),attrName.end(),attrName.begin(),::toupper);

                    

                    if (attrName=="FACE") {

                        //设置字体

                        newFont.fontName=attr->Value();

                    }else if (attrName=="COLOR"){

                        //设置颜色

                        newFont.color=charToColor3B(attr->Value());

                    }else if(attrName=="SIZE"){

                        //设置大小

                        newFont.fontSize=attr->IntValue();

                    }else if (attrName=="OPACITY"){

                        //设置不透明度

                        newFont.opacity=attr->IntValue();

                    }

                    

                    attr=attr->Next();

                }

                _fontList.push_back(newFont);//添加新字体

                renderNode(n->FirstChild());//继续渲染子集

                _fontList.pop_back();//移除新字体

            }else if (name=="IMG") {

                CCLOG("图片标签");

                //图片标签的属性

                auto attr=n->FirstAttribute();

                const char *src;

                Color3B col(255,255,255);

                GLubyte opacity=255;

                while (attr!=nullptr) {

                    //遍历所有属性

                    std::string attrName=attr->Name();

                    std::transform(attrName.begin(),attrName.end(),attrName.begin(),::toupper);

                    

                    if (attrName=="SRC") {

                        //设置图片路径

                        src=attr->Value();

                    }else if (attrName=="COLOR"){

                        //设置颜色

                        col=charToColor3B(attr->Value());

                    }else if (attrName=="OPACITY"){

                        //设置不透明度

                        opacity=attr->IntValue();

                    }

                    attr=attr->Next();

                }

                auto img=ui::RichElementImage::create(0,col,opacity,src);

                

                _line->pushBackElement(img);

            }else if (name=="BR") {

                CCLOG("换行标签");

                addNewLine();

            }

        }

        node=node->NextSibling();

    }

}

 

cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)

标签:

原文地址:http://www.cnblogs.com/daochong/p/5271079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!