我在 Roblox Studio (Lua) 中创建了简单的时钟,并在 while 循环之间添加了
wait(1)
。问题是不刷新。它只是显示时间,这就是一切。这是代码:
local StarterGui = game:GetService("StarterGui")
while true do
local UniversalTime = DateTime.now():ToUniversalTime()
local Hours = UniversalTime.Hour + 1
local Minutes = UniversalTime.Minute
local Seconds = UniversalTime.Second
if (Minutes < 10) then
Minutes = "0"..Minutes
end
if (Seconds < 10) then
Seconds = "0"..Seconds
end
StarterGui.ScreenGui.Frame.Clock.Text = `{Hours}:{Minutes}:{Seconds}`
wait(1)
end
我不知道是什么原因导致了这个问题,我也不知道如何修复它。
StarterGui
作为 PlayerGui
复制到客户端。如果您从那里更新值,他们只会以玩家的身份看到更改。
将时钟保留在服务器中,然后让客户端侦听该对象值的更新。这样,您就暂时获得了一个事实来源。
或者,如果您想继续使用 DateTime (这也可以),您可以像此处一样在
StarterGui
下面设置时钟,但更改您的定义(以及适当的 var 名称),以便它将引用 复制后PlayerGui
。但请理解,通过使用此方法,您同意不会将该值用于除时钟 GUI 之外的任何用途。将其用于任何敏感的事情很容易失去同步。
local gui = script.Parent -- will reference `PlayerGui` after client replication
while true do
local UniversalTime = DateTime.now():ToUniversalTime()
[. . .]
gui.ScreenGui.Frame.Clock.Text = `{Hours}:{Minutes}:{Seconds}`
wait(1)
end
旁注:我建议查看任务库以找到使用线程执行此操作的更好方法。