在"Players.shaz:WaitForChild( "Values" )"上可能产生无限收益,我试图使它当玩家声称展位时,它将布尔值变为真


local claim = script.Parent.Parent.Parent.Parent.StandMesh.Claim

这将触发Proximty Prompt。

claim.Triggered:Connect(function(player)
local screengui = player.PlayerGui:WaitForChild('Popups')
local popup = player.PlayerGui:WaitForChild('Popups').ClaimedBooth
local bool = player:WaitForChild('Values').Claimed

"可能的无限产量";是一个警告。它可以让您知道您的代码是不安全的,并且当执行此代码时,Values对象不存在(或拼写错误(的时间超过5秒,并且player:WaitForChild('Values')无法解析为对象。

实例:WaitForChild((的文档是这样说的:

票据

  • 如果对该函数的调用超过5秒而没有返回,并且没有指定timeOut参数,则会在输出中打印一条警告,警告线程可能会无限期地产生;此警告的形式为"X:WaitForChild("Y"("上可能的无限屈服,其中X是父对象名称,Y是子对象名称
  • 如果在进行调用时存在具有给定名称的子级,则此函数不会产生
  • 此函数的效率低于Instance:FindFirstChild或点运算符。因此,只有当开发人员不确定对象是否已复制到客户端时,才应使用它。通常,这只是第一次访问对象

您可以通过添加timeout作为第二个参数来删除此警告,但您需要考虑到可能找不到对象的事实:

local timeout = 2 -- seconds
local values = player:WaitForChild('Values', timeout)
if values then
local boolVal = values.Claimed
print("Claimed = ", boolVal.Value)
-- mark it as claimed
boolVal.Value = true
else
warn("Could not find 'Values' BoolValue")
end

或者,如果您知道在执行此代码时Values将存在,您可以简单地使用点运算符或FindFirstChild()函数访问它。但这将抛出一个";尝试索引nil";如果Values不存在,则出现错误。

local boolVal = player:FindFirstChild('Values').Claimed
-- or
local boolVal = player.Values.Claimed
-- mark it as claimed
boolVal.Value = true

当您看到此警告时,您应该仔细检查对象名称的拼写,以及脚本执行的时间,以确保对象确实存在。

相关内容

  • 没有找到相关文章

最新更新