Lua 实现富文本打字机逐字显示效果
程序员文章站
2022-06-22 20:02:31
...
Lua 实现富文本打字机逐字显示效果
例如我们有一段富文本,并且需要像
local RichText = “这是一段<red>富文本</>”
我的思路是优先分隔每个字符,即第一次循环得到
_DialogStr = “这”
第二次循环得到
_DialogStr = “这是”
当循环得至
_DialogStr = “这是一段<”
进行字符串截取,只截取 ‘<’ 前的字符,并且不进行延时循环下一个字符,当循至
_DialogStr = “这是一段<red>”
则开始对字符串进行截取,截取从 “<red>” 标签到字符串结尾,并且开始匹配 “</>” 标签,若未匹配到对应字符串,则对原本字符串进行 “</>” 的补齐。
具体代码如下:
function GetRichTextFormat(_DialogStr)
if not _DialogStr then return "" end
local _OutStr = ""
local _Index = 1
local _IsNeedDelay = true
while true do
local _TagIndex = string.find(_DialogStr, "<", _Index)
if _TagIndex then
local _CheckStr = string.sub(_DialogStr, _TagIndex, string.len(_DialogStr))
local _StartTagIndex = string.find(_CheckStr, "(<.+>)")
if _StartTagIndex then
local _EndTagIndex = string.find(_CheckStr, "(</>)")
if _EndTagIndex then
_Index = _TagIndex + _EndTagIndex + 3
else
local _LastChar = string.sub(_CheckStr, string.len(_CheckStr), string.len(_CheckStr) + 1)
if _LastChar == "<" then
_OutStr = _DialogStr .. "/>"
elseif _LastChar == "/" then
_OutStr = _DialogStr .. ">"
else
_OutStr = _DialogStr .. "</>"
end
_IsNeedDelay = true
break
end
else
_OutStr = string.sub(_DialogStr, 1, _TagIndex - 1)
_IsNeedDelay = false
break
end
else
_OutStr = _DialogStr
_IsNeedDelay = true
break
end
end
return _OutStr, _IsNeedDelay
end
代码中 _IsNeedDelay 代表是否需要延时显示下一个字符,就比如从 “这是一段<” 到 “这是一段<red>” 之间是不需要延时的。
上一篇: UGUI 打字机效果
下一篇: 正则化定义和类别