cocos creator emoji表情换行不显示。

版本1.8.1
nodeContent.getComponent(“cc.Label”).string = content.data.content;
以上数据是服务端返过来的,数据没有问题。

但是表情在换行的时候会导致不显示,我猜是字符断了的原因,但是不知道该怎么解决,请大家帮忙看下。

有的是文字+表情,有的是数字+表情,有的英文+表情,宽都是不等的。。。

稍等,我这边研究一下,给你个方案

好的,麻烦了。

先看编辑器里面的情况:


实际运行效果:

需要自定义引擎,改动的引擎文件:
https://github.com/cocos-creator/engine/blob/master/cocos2d/core/utils/text-utils.js

新增label_firstEmoji和label_lastEmoji

    label_lastEnglish : /[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłęćąŻŹŚÓŃŁĘĆĄ-яА-ЯЁё]+$/,
    label_firstEnglish : /^[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôûаíìÍÌïÁÀáàÉÈÒÓòóŐőÙÚŰúűñÑæÆœŒÃÂãÔõěščřžýáíéóúůťďňĚŠČŘŽÁÍÉÓÚŤżźśóńłęćąŻŹŚÓŃŁĘĆĄ-яА-ЯЁё]/,
    label_firstEmoji : /^[\uD83C\uDF00-\uDFFF\uDC00-\uDE4F]/,
    label_lastEmoji : /([\uDF00-\uDFFF\uDC00-\uDE4F]+|\S)$/,
    label_wrapinspection : true,

fragmentText方法中,加入代码:

            //To judge whether a emoji words are truncated
            if (this.label_firstEmoji.test(sLine)) {
                result = this.label_lastEmoji.exec(sText);
                if (result && sText !== result[0]) {
                    fuzzyLen -= result[0].length;
                    sLine = text.substr(fuzzyLen);
                    sText = text.substr(0, fuzzyLen);
                }
            }

目前可以用上述的思路去解决换行的问题,包括可以定制一些自己换行的规则。关于emoji表情换行这个问题,我们后续版本会进行修复https://github.com/cocos-creator/engine/issues/3589

你好,还是不可以,我的版本是1.8.1,会是版本问题么?



这是编辑器图。

这是效果图。

你好,我升级到了2.0.2,修改了text-utils.js文件. 但是还是不可以。。。

text-utils.rar (2.4 KB)
你改完有使用gulp重新构建引擎么?另外如果你是修改的备份引擎,需要修改引擎的路径
https://docs.cocos.com/creator/manual/zh/advanced-topics/engine-customization.html

谢谢,可以了