cocos creator 实现打字机的效果

Posted jhy-ocean

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos creator 实现打字机的效果相关的知识,希望对你有一定的参考价值。

作为一个萌新,我只想说我是没有感情的粘贴工具!

let richText = this.viewNode.getChildByName(‘richText‘).getComponent(cc.RichText);
        const str = "<u>hello</u><color=#ff0000>Red Text,</color><br/>"+
            "<size=60>enlarge me,</size>"+
            "<br/><outline color=red width=4>A label with <i>outline,</i></outline>"+
            "<br/><b>This text will be rendered as bold,</b>"+
            "<br/><i>This text will be rendered as italic。</i>";
        this.richText(richText,str);

private richText(richTextNode,str: string = "") 
        const regex = /<.+?\/?>/g; // 匹配尖括号标签
        const matchArr = str.match(regex);
        const specialChar = "│";
        const replaceStr = str.replace(regex, specialChar); // 标签数组
        const textArr: string[] = replaceStr.split(specialChar); // 文字数组
        const strArr: string[] = []; // 存放处理过的文字数组
        let paraNum = 0; // 待替换参数个数
        for (let text of textArr) 
            // 非空字符替换成类似 $[0-n] 参数
            if (text !== "") 
                text = `$[$paraNum]`;
                paraNum += 1;
            
            strArr.push(text);
        
        let templetStr: string = strArr.join(specialChar); // 数组转成待替换字符串
        for (let index = 0; index < textArr.length; index++) 
            // 转换代替换字符串之后, 删除文字数组多余空字符
            if (textArr[index] === "") 
                textArr.splice(index, 1);
                index = index - 1;
            
        
        while (templetStr.search(specialChar) !== -1) 
            // 数组转成的字符串原本 ‘特殊字符‘ 位置都是富文本标签的位置, 替换回标签
            if (matchArr[0]) 
                templetStr = templetStr.replace(specialChar, matchArr[0].toString());
                matchArr.splice(0, 1);
             else 
                templetStr = templetStr.replace(specialChar,             "");// 空字符串替换,防止死循环
                console.warn("matchArr not enough");
            
        
        const lastStrArr: string[] = []; // 转换后富文本数组
        const arrayParm: string[] = new Array(paraNum).fill(""); // 替换参数数组
        for (let i = 0; i < textArr.length; i++) 
            for (const text of textArr[i]) 
                arrayParm[i] = arrayParm[i] + text;
                let replaceStr1 = templetStr;
                for (let index = 0; index < paraNum; index++) 
                    replaceStr1 = replaceStr1.replace(`$[$index]`, arrayParm[index]);
                
                lastStrArr.push(replaceStr1);
            
        
        let lastStrIndex = 0;
        const func = () => 
            if (lastStrIndex >= lastStrArr.length) 
                return;
            
            richTextNode.string = lastStrArr[lastStrIndex];
            lastStrIndex += 1;
            setTimeout(() => 
                func();
            , 100);
        ;
        setTimeout(() => 
            func();
        , 1000);
    

我只是战略性mark 打扰了~~

以上是关于cocos creator 实现打字机的效果的主要内容,如果未能解决你的问题,请参考以下文章

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

实战用CSS实现文本打字机效果

原生js实现简单打字机效果

如何实现文字逐个出现的打字机效果

jQuery实现的打字机效果

jQuery实现打字机效果