为什么函数不刷新

问题描述 投票:0回答:1

我在 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

我不知道是什么原因导致了这个问题,我也不知道如何修复它。

lua roblox roblox-studio
1个回答
0
投票

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

旁注:我建议查看任务库以找到使用线程执行此操作的更好方法。

© www.soinside.com 2019 - 2024. All rights reserved.