如何修复 Roblox 无限收益错误?

Posted

技术标签:

【中文标题】如何修复 Roblox 无限收益错误?【英文标题】:How do I fix Roblox Infinite Yield Error? 【发布时间】:2020-03-08 21:05:59 【问题描述】:
<---This is my current local script--->

local replicatedStorage = game:GetService("ReplicatedStorage")
local starterRebirthAmount = 5000

local player = game.Players.LocalPlayer
local mainFrame = script.Parent:WaitForChild("MainFrame")
local rebirthMenu = mainFrame:WaitForChild("RebirthMenu")
local mainButton = script.Parent:WaitForChild("MainButton")
local rebirthButton = rebirthMenu:WaitForChild("RebirthButton")
local strengthToRebirth = rebirthMenu:WaitForChild("StrengthToRebirth")
local rebirths = player:WaitForChild("leaderstats").Rebirths <--The Bit I think is causing the 
problems.

strengthToRebirth.Text = "You need at least "..math.floor((starterRebirthAmount + (rebirths.Value) * 
math.sqrt(500000))).." strength to rebirth"

mainButton.MouseButton1Click:Connect(function()

mainFrame.Visible =  not mainFrame.Visible

end)

rebirthButton.MouseButton1Click:Connect(function()
local result = replicatedStorage.Remotes.Rebirth:InvokeServer()
if result == true then
rebirthButton.Text  = "Successfully Rebirthed"
wait(1)
rebirthButton.Text = "CLICK HERE TO REBIRTH"
elseif result == "NotEnoughStrength" then 
rebirthButton.Text = "Not Strong Enough!"
wait(1)
rebirthButton.Text = "CLICK HERE TO REBIRTH"

end
end)

rebirths:GetPropertyChangedSignal("Value"):Connect(function()

strengthToRebirth.Text = "You need at least "..math.floor((starterRebirthAmount + (rebirths.Value) * 
math.sqrt(5000000))).." strength to rebirth" end)

我每次都遇到同样的错误。 21:10:20.963 -

无限产量可能在 'Players.Archerofcool:WaitForChild("leaderstats")'

【问题讨论】:

我忘了说这让我的整个游戏都变砖了。 另外说明,lua cmets 是 -- 而不是 &lt;--- 【参考方案1】:

WaitForChild() 如果您必须等待事物加载到世界中,例如玩家及其外观,则该方法非常有用。但正如 Piglet 指出的那样,不提供超时会导致它抛出像你看到的那样的错误。

当您提供超时时,该函数将返回 nil,您需要能够对这种情况做出反应。

如果您确定在脚本执行时所有内容都已加载,您可以像获取普通索引一样简单地抓取所有内容。

-- wait for the stuff to load...
while script.Parent:WaitForChild("MainFrame", 1) == nil do
    wait(1)
end

-- grab all the elements
local mainButton = script.Parent.MainButton
local mainFrame = script.Parent.MainFrame
local rebirthMenu = mainFrame.RebirthMenu
local rebirthButton =  rebirthMenu.RebirthButton
local strengthToRebirth = rebirthMenu.StrengthToRebirth

-- wait for the player to load in
local player = game.Players.LocalPlayer
while player:WaitForChild("leaderstats", 1) == nil do
    wait(1)
end
local rebirths = player.leaderstats.Rebirths

【讨论】:

【参考方案2】:

使用任何功能前请阅读文档!

来自https://developer.roblox.com/en-us/api-reference/function/Instance/WaitForChild

等待孩子

如果对该函数的调用超过 5 秒没有返回,并且没有返回 已指定 timeOut 参数,将向 线程可能无限期产生的输出;这个警告需要 在 'X:WaitForChild("Y")' 上形成无限收益,其中 X 是 父对象名,Y 是子对象名。

【讨论】:

以上是关于如何修复 Roblox 无限收益错误?的主要内容,如果未能解决你的问题,请参考以下文章

Roblox 无限旋转循环

Roblox Lua 错误值不是 Player 的有效成员,但我不尝试访问它

发布到 Google 脚本时如何修复“HTTP 405”?

索引超出范围错误? Roblox 使用 Cookie 自动登录

为啥 Roblox 和 Roblox Studio 在运行某些没有错误代码的脚本时都会崩溃?

如何在 Roblox 中打开和关闭 gui?