首页 > 解决方案 > Roblox Studio - 当我尝试出售背包中的“雪”时出现警告/错误

问题描述

如下图所示,当我进入圈子时,我无法卖掉我背包里的东西。我收到此错误/警告,但无法弄清楚问题所在。我发现问题发生在第 5 行:player:WaitForChild

第 5 行的错误/警告:Infinite yield possible on Players.asbjornbonde.PlayerGui:WaitForChild("Stats")

这是图片:
截屏

这是我的代码:

script.Parent.Touched:connect(function(Hit)
    local player = game.Players:FindFirstChild(Hit.Parent.Name)
    if player then
        local leaderstats = player:FindFirstChild("leaderstats")
        local PlayerGui = player:WaitForChild("PlayerGui"):WaitForChild("Stats").Backpack
        if leaderstats and PlayerGui then
            local Cash = leaderstats:FindFirstChild("Cash")
            local snow = PlayerGui:FindFirstChild("snow")
            if Cash and snow then
                if snow.Value <= 0 then
                else
                Cash.Value = Cash.Value + 2 * snow.Value
                snow.Value = 0
                script.Parent.DigSound:Play()
                script.Disabled = true
                wait(0.1)
                script.Disabled = false
                end
            end
        end
    end
end)

我花了很多时间试图解决这个问题,但我真的做不到。我会很感激帮助。

标签: luaroblox

解决方案


Infinite yield possible on是 Roblox Studio 中的一个警告,这意味着如果它正在等待的对象不存在且从未创建,您的脚本可能会一直停留在该行等待。

由于唯一WaitForChild导致错误的是两个WaitForChild' 连接在一起我猜脚本不喜欢你这样做。

第一个解决方案

如果您要将两个WaitForChild' 拆分为两个不同的变量,它不应该给您错误,但是这会无缘无故地创建另一个变量,所以我会选择第二种解决方案。

第二种解决方案

由于播放器已加载并触摸了该部分,因此可以安全地假设 GUI 已为它们加载,因此如果您仍想检查是否没有获得 a或您可以正常引用它,您可以将其更改WaitForChild为:FindFirstChildnilplayer.PlayerGui.Stats.Backpack

希望这可以帮助。


推荐阅读