执行后效果:

前端使用:

后台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();

}

}

转载于:https://www.cnblogs.com/daochong/p/5271079.html

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

  1. MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)

    惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...

  2. MFC静态文本控件设置超链接

    有时我们需要在窗口上设置一个超链接,比如在Aboutdlg上设置"我的博客"这样的超链接.具体的设置方法如下. 1.首先我们在窗体上添加一个Static文本控件,修改Caption ...

  3. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  4. 初级软件实作 - 星便笺 - 之二 - 富文本控件扩展

    便笺的主体做好了,最近一直觉得缺点儿什么,决定改变便笺的开发方向,把便笺做成一个开放平台. 开放平台好呀,只是缺点儿什么.什么呢?好的文本控件. 我希望文本控件能实现的功能: 纯正的文本控件 文字随意 ...

  5. python精要(82)-wxpython(3)-静态文本控件与状态栏

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Feb 22 08:35:42 202 ...

  6. vue单位文本控件与vue加密文本控件

    vue单位文本控件: 使用方式: npm install dami-text-input --save使用:<text-input v-model="test" :unit= ...

  7. Flutter的文本控件的基本使用

    Flutter的文本控件的基本使用 import 'package:flutter/material.dart';void main(){runApp(MaterialApp(title: " ...

  8. bkwin设置文本控件为多行模式

    2019独角兽企业重金招聘Python工程师标准>>> 指定textmode, 给到文本控件的区域  <class name="xxxxx" textmod ...

  9. c 用户控件 多语言,多语言文本控件重叠解决方案

    多语言文本控件重叠解决方案 文本控件重叠问题分析 文本控件重叠解决方案制定 在cocostudio编辑中做好前期基础准备工作 使用UIHelper.bindUIWidget自动化绑定UI布局 视图自动 ...

最新文章

  1. docker-compose:使用docker-compose部署nginx+supervisor+uwsgi+flask程序(mongodb)
  2. mysql删除本机用户_mysql 不小心把root用户删除了,重建本地用户及远程用户
  3. [轉]MS SQL Server启用AWE用查看内存使用情况
  4. php中静态方法有什么作用,PHP中的静态方法与非静态方法有什么不同吗?
  5. PHP增删查改性能优化
  6. 外部数据源的使用汇总二
  7. mysql5.5启动报错:The server quit without updating PID file ([FAILED]localhost.localdomain.pid)....
  8. snap chrominu has install-snap change in progress
  9. EXCEL闪退的处理方法
  10. 希望能多看几遍找到自己的影子
  11. 用vuejs如何实现ajax,vuejs使用FormData实现ajax上传图片文件
  12. 英文对“ Big O”符号的解释是什么?
  13. shping cloud搭建大觅网-之sping cloud初体验
  14. 硬件-电子基础元器件(一)电阻
  15. (三)Android系统启动流程
  16. 【大学物理·早期量子论和量子力学基础】量子力学中的氢原子问题
  17. 避免怀疑跳槽,程序员该怎么请假?
  18. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
  19. SSO单点登录系统设计,数据库设计文档
  20. 2021MySQL面试题

热门文章

  1. QT下添加*.qrc(图标Icon、图像)资源
  2. 转 ajax.dll 与 ajaxpro.dll的用法
  3. Spring Cloud F Spring Boot 2.0 版本升级说明书
  4. String去重方法
  5. [Linux学习笔记] Linux常用命令 - 文件搜索命令
  6. SCCM 2012 R2 从入门到精通 Part11 系统推送(2)
  7. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
  8. 2013年6月6日星期四
  9. GCC,GDB,Makefile
  10. 【自然框架】——重开在线演示