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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章