如何实现逐字高亮

知道每个字的点亮的开始时间,和结束时间,如何高效实现按时间轴点亮单个文字。

如:你好世界

第一秒亮起:你
第二秒亮起:好,你熄灭
第三秒亮起:世,好熄灭

let wordStr = "你好世界";
        let wordArr = wordStr.split('');
        let time = 1;
        wordArr.forEach((v, k) => {
            let node = new cc.Node();
            node.addComponent(cc.Label);
            node.getComponent(cc.Label).string = v + '';
            this.testParent.addChild(node);
            node.opacity = 0;
        })

        this.testParent.children.forEach((v,k)=>{
            cc.tween(v)
                .delay(parseInt(k) * time)
                .to(0, {
                    opacity: 255
                })
                .delay(time)
                .to(0, {
                    opacity: 0
                })
                .call((v)=>{
                    v.destroy();
                })
                .start();
        })

谢谢大佬,方法是可以的。但是项目中文字交过,有汉字和字母,label量大的时候性能较低,消耗了大量的cpu,请问如何优化

我感觉你可以自己做一个对象池,对象池有三个label,交替显示,然后动态设置位置跟文字,设置最大长度上限,过了自动换行

自己手动计算下Label的位置,大小解决

在Label上加个Mask,移动Mask的位置并改变Mask的透明度

1赞

来自四年后的回应,可以图片遮罩下,然后按帧展开

1赞

搞个富文本就行,一秒一变。。。或者几个label 拼一起 ,富文本也是几个label拼一起的

不用那么复杂,底下一个整个文本,上面再盖一个高亮版本的单字上去就行了!

1赞

让我想起了,用一个 shader 也可以做。

2个label可以搞定
一个label显示所有暗的文字,例如“你好世界”
另一个label显示高亮的那个字
第一秒盖在“你”上面
第二秒盖在“好”上面
……