补间文本最有效的方法是什么?



我想知道如何对文本进行补间,最有效的方法是,我想到了补间服务但它只能对数值进行补间所以对字符串进行补间是不可能的,显然我可以按顺序添加每个字母但用这种方法制作段落需要一些时间,所以我需要一种高效可行的方法,不管怎样,这是我用补间服务

的代码
local serv = game:GetService("TweenService")
local start = script.Parent.TextLabel
local stop = {}
stop.Text = "hi there lol this is just a test"
local info = TweenInfo.new(5, Enum.EasingStyle.Sine)
local play = serv:Create(start, info, stop)
while true do
wait(5)
play:Play()
end

我知道这行不通,但我给了它一个尝试

正如您已经发现的,不能直接对文本进行间缝。补间被设计为取起始点和结束点,并填补"补间"中的空白。但对于文本,这不是很清楚如何你会这样做。如果你的起点是"hello"终点是"再见",到达终点的步骤是什么?

但是如果你正在寻找一种方法来制作经典的打字机动画,你可以相当容易地一次一个字母地动画文本。

这涉及到循环遍历消息并每次获取该消息的一个更大的子字符串。这将在每次动画更新时添加一个字母。使用一些数学方法和TweenService:GetValue,我们可以插值动画的长度。

那么试试这样写:

local TweenService = game:GetService("TweenService")
local function writeText(targetLabel, text, duration, easingStyle, easingDirection)
-- validate input
local numLetters = #text
if numLetters == 0 then
targetLabel.Text = ""
return
end
if easingStyle == nil then
easingStyle = Enum.EasingStyle.Linear
end
if easingDirection == nil then
easingDirection = Enum.EasingDirection.InOut
end


local startingTime = tick()
local letterCount = 0
while letterCount < numLetters do
-- calculate how far into the animation we should be 
local timePassed = (tick() - startingTime)
local percentDone = TweenService:GetValue(timePassed / duration, easingStyle, easingDirection)
letterCount = math.ceil(percentDone * numLetters)
local message = string.sub(text, 1, letterCount)

-- update the message
targetLabel.Text = message

-- yield so the animation can play
wait(0.05)
end
end

-- test it out
local lbl = script.Parent.TextLabel
local msg = "hi there lol this is just a test, it can be really long too."
local duration = 5 --seconds
local style = Enum.EasingStyle.Sine
local direction = Enum.EasingDirection.InOut
writeText(lbl, msg, duration, style, direction)

相关内容

  • 没有找到相关文章

最新更新