[✔️] cocos2dx RichText bug

简介: [✔️] cocos2dx RichText bug

image.png


image.png


如上图所示,根据xml的结构,2349应该是相同的字号,而cocos2dx的渲染结果却是不同的size


解决办法:


  1. 在解析xml的时候,font空attribute自动删除


  1. engine支持空font标签,空属性的font标签也需要push,我采用的是这个方式解决的

我使用的是cocos2dx 3.17,但是这个bug应该在4.x中同样存在


如果删除empty的判断,是解决了空tag的问题,但是又产生了其他问题,下面的xml渲染出来的文字是黄色的


<font color="#ffff00">
    <br/>
</font>
<font>
    white
</font>


导致这个问题的本质上还是无法正确区分标签空属性非字体属性标签


MyXMLVisitor::setTagDescription("br", false, [](const ValueMap& /*tagAttrValueMap*/) {
    RichElementNewLine* richElement = RichElementNewLine::create(0, Color3B::WHITE, 255);
    return make_pair(ValueMap(), richElement);
});


std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型,它的定义形式如下:


template <class T1, class T2> struct pair;


这里的make_pair第一个参数,预期返回nullptr会好点,因为强数据类型的原因,无法返回nullptr


typedef std::unordered_map<std::string, Value> ValueMap; // 无序列表
typedef std::function<std::pair<ValueMap, RichElement*>(const ValueMap& tagAttrValueMap)> VisitEnterHandler;
void setTagDescription(const std::string& tag, bool isFontElement, RichText::VisitEnterHandler handleVisitEnter);


void MyXMLVisitor::startElement(void* /*ctx*/, const char* elementName, const char** atts){
    auto result = tagBehavior.handleVisitEnter(tagAttrValueMap);
    ValueMap& attrValueMap = result.first;
    RichElement* richElement = result.second;
}


我们发现凡是返回ValueMap()的都不是fontElement,正好和setTagDescription的第二个参数isFontElement呼应,也和endElement逻辑是对应的


void MyXMLVisitor::endElement(void* /*ctx*/, const char* elementName)
{
    auto it = _tagTables.find(elementName);
    if (it != _tagTables.end()) {
        auto tagBehavior = it->second;
        if (tagBehavior.isFontElement) {
            popBackFontElement();
        }
    }
}


具体的修复pr我提交到了官方仓库,虽然现在cocos2dx也很少有人维护了。

目录
相关文章
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
21274 71
|
8天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1400 10
|
8天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1257 5
|
9天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1108 14
|
3天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
396 118
|
6天前
|
存储 缓存 NoSQL
阿里云经济型e实例(ecs.e-c1m4.large)2核8G云服务器优惠活动价格及性能测评
阿里云经济型e实例(ecs.e-c1m4.large)2核8G配置,支持按使用流量或按固定带宽两种公网计费方式,搭配20G起ESSD Entry云盘,是主打高性价比的内存优化型入门选择。其核心特点是8G大内存适配轻量内存密集场景,计费模式灵活可控,既能满足个人开发者的复杂测试项目需求,也能支撑小微企业的基础业务运行,无需为闲置资源过度付费。以下从优惠活动价格、性能表现、适用场景及避坑要点四方面,用通俗语言详细解析。
224 153
|
3天前
|
机器学习/深度学习 人工智能 算法
炎鹊「Nexus Agent V1.0」:垂直领域AI应用的原生能力引擎
炎鹊AI「Nexus Agent V1.0」是垂直行业专属AI原生引擎,融合大模型、AIGA决策大脑、行业知识图谱与专属模型,打造“感知-决策-执行”闭环。支持21个行业低代码构建工具型、员工型、决策型AI应用,实现技术到业务价值的高效转化,推动AI从实验走向规模化落地。(239字)
242 1

热门文章

最新文章