ROBLOX Studio ScreenGui 分数展示

ROBLOX Studio ScreenGui score display

如何对变量进行 TextLabel 的文本更新?

我试过将文本设置为 "score: ", _G.score

但它不会随变量更新,是的,我确实在变量更新后设置了文本。

代码:

script.Parent.mouseClick:connect(function()
   _G.score = _G.score + 1
   game.StarterGui.ScreenGui.TextLabel.Text = _G.score
end)

game.StarterGui实际上是一个模板GUI,每次玩家加入游戏时,都会制作一个副本并赠送给新玩家。因此,如果您尝试修改它,您实际上不会修改提供给所有玩家的副本。

这个问题有两种解决方法:

  1. 只使用相对路径——也就是说,只使用以“script.”开头的 GUI 对象的路径,就像你说的 script.Parent.mouseClick:connect(…)
  2. 遍历已分发给玩家的所有副本。这可以在每个 Player 对象的 .PlayerGui 下找到。

你几乎不应该做后者。您可以通过以下方式做出决定:

如果您的代码在 StarterGui 中找到(而不是在工作区或其他地方),那么您应该使用前者。这是因为当 StarterGui 被复制到新玩家的 GUI 中(称为 PlayerGui)时,该脚本将与其一起被复制,因为它在 StarterGui 中。因此,像 script.Parent.Something.SomethingElse.Text = "hi" 这样的相对路径是有效的;它会影响 that PlayerGui.

如果您在 StarterGui 中有一些 而不是 的代码(就像它在工作区中一样),那么您必须使用后者。这是因为这样的脚本不会被复制到每个玩家的 PlayerGui 中。因此,您必须在 for 循环或类似的东西中遍历每个玩家的 PlayerGui。这种情况很少见,如果有的话,请考虑尽可能避免这种情况,因为这是一个非常棘手的情况,需要尝试处理;您必须考虑特殊情况,例如玩家尚未获得 StarterGui 副本的可能性。

请让我知道这个解释是否有任何混淆之处;我会尽力解释得更好。

您可以在此处找到一些视觉效果来配合此解释,并进一步阅读官方 ROBLOX Wiki 对此主题的解释:"Player vs. Starter GUIs".