cocos creator 知识点记录二:富文本、打字、昵称截断

知乎链接:

Cocos Creator系列一: 导入DragonBones动画:https://zhuanlan.zhihu.com/p/59294829

Cocos Creator系列二:基础知识(持续更新):https://zhuanlan.zhihu.com/p/59567183

Cocos Creator系列三:网络同步机制,网络协议(持续更新):https://zhuanlan.zhihu.com/p/60883576

Cocos Creator系列四:消息框架:https://zhuanlan.zhihu.com/p/63193440

富文本:

文案里配富文本标签,

//str  字符串  index 需要获取index+1长度文字并加标签   
 public static getTagStrIndex(str:string,index:number):string
    {
        var tagIndex1 = str.indexOf('<',0);
        var tagIndex2 = str.indexOf('>',0);
        var html = "";

        if(index>=this.getTagStrLen(str))
            return "";

        var tagStack: Array<string> = new Array<string>();
        var i = 0;

        if(index<tagIndex1||tagIndex1==-1)
        {
            //没有标签
            return  str.substr(0,index+1);
        }else
        {
            //有标签
            var curLen = 0;
            var curIndex = 0;
            // html += str.substr(0,tagIndex1);
            while(curLen<=index)
            {
                var needLen = index-curLen+1;
                if(tagIndex1!=-1&&needLen<=(tagIndex1-curIndex))
                {
                    //长度满足
                    for(i=0;i<tagStack.length;i++)
                    {
                        html += tagStack[i];
                    }
                    html += str.substr(curIndex,needLen);
                    for(i=tagStack.length-1;tagStack.length>0&&i>=0;i--)
                    {
                        if(tagStack[i][1]=='c')
                            html += "</color>";
                        else if(tagStack[i][1]=='b')
                            html += "</b>";
                    }
                    return html;
                }else if(tagIndex1==-1)
                {
                    //没有标签
                    var needLen = index-curLen+1;
                    html += str.substr(curIndex,needLen);
                    return html;
                }

                for(i=0;i<tagStack.length;i++)
                {
                    html += tagStack[i];
                }
                html += str.substr(curIndex,tagIndex1-curIndex);
                for(i=tagStack.length-1;i>=0;i--)
                {
                    if(tagStack[i][1]=='c')
                        html += "</color>";
                    else if(tagStack[i][1]=='b')
                        html += "</b>";
                }

                curLen += tagIndex1-curIndex;
                curIndex = tagIndex2+1;

                var tag = str.substring(tagIndex1,tagIndex2+1);
                if(tag[1]=='i')
                {
                    curLen += 1;
                    html += tag;
                }else if(tag[1]=='b'||tag[1]=='c'){
                    tagStack.push(tag);
                }else if(tag[1]=='/')
                {
                    tagStack.pop();
                }

                tagIndex1 = str.indexOf('<',curIndex);
                tagIndex2 = str.indexOf('>',curIndex);

            }
        }
    }

打字效果:

    TypingWrite(label:cc.RichText,text:string)
    {
        if(this.typingWriteState)
        {
            label.string = this.blackString(text);
            this.typingWriteState = false;
            return;
        }
        this.typingWriteState = true;
        let len = GlobalFunction.getTagStrLen(text);
        let html = "";
        let step = 0;
        this.func = function(){
            html = GlobalFunction.getTagStrIndex(text,step);
            label.string = this.blackString(html);
            if(++step == len){
                this.unschedule(this.func,this);
                label.string = this.blackString(text);
                this.typingWriteState = false;
            }else if(this.typingWriteState==false)
            {
                this.unschedule(this.func,this);
                label.string = this.blackString(text);
            }
        }
        this.schedule(this.func,0.05,cc.macro.REPEAT_FOREVER,0);
        this.questionLabel.node.active = true;
        label.string = "";
    }

昵称截断

原文:https://forum.cocos.com/t/cocos-creator/76916

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张乂卓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值