ROBLOX Studio ScreenGui 乐谱显示
Posted
技术标签:
【中文标题】ROBLOX Studio ScreenGui 乐谱显示【英文标题】:ROBLOX Studio ScreenGui score display 【发布时间】:2019-03-24 03:33:04 【问题描述】:如何对变量进行TextLabel
的文本更新?
我已尝试将文本设置为"score: ", _G.score
但它不会随变量一起更新,是的,我确实在变量更新后设置了文本。
代码:
script.Parent.mouseClick:connect(function()
_G.score = _G.score + 1
game.StarterGui.ScreenGui.TextLabel.Text = _G.score
end)
【问题讨论】:
此代码是位于Script
还是LocalScript
?
普通的Script
如果您曾在 GUI 中放置过脚本,则它应该位于 LocalScript
中。由于每个玩家的 GUI 对他们来说都是独一无二的(如果我单击一个按钮,它不应该在 您的 GUI 中进行更改),它必须由每个玩家的计算机处理。 Script
s 由服务器运行,而LocalScript
s 由每个玩家的计算机在本地运行。然而,我必须承认,我不确定这是否只是形式,或者这是否真的很重要。自从我学会这一点以来已经有一段时间了。
【参考方案1】:
game.StarterGui
实际上是一个模板GUI,每次玩家加入游戏时,都会制作一份副本并提供给新玩家。因此,如果您尝试修改它,您实际上并不会修改提供给所有玩家的副本。
这个问题有两种解决方案:
-
只使用相对路径——也就是说,只使用以“
script.
”开头的 GUI 对象的路径,就像你说的 script.Parent.mouseClick:connect(…)
。
遍历已分发给玩家的所有副本。这可以在每个Player
对象的.PlayerGui
下找到。
你几乎不应该做后者。您可以通过以下方式做出决定:
如果您的代码在StarterGui
(而不是在工作区或其他地方),那么您应该使用前者。这是因为当StarterGui
被复制到新玩家的GUI(称为PlayerGui
)时,该脚本将与它一起被复制,因为它位于StarterGui
中。因此,像script.Parent.Something.SomethingElse.Text = "hi"
这样的相对路径将是有效的;它会影响 那个 PlayerGui
。
如果您有一些代码在StarterGui
中不是(例如在工作区中),那么您必须使用后者。这是因为这样的脚本不会被复制到每个玩家的PlayerGui
中。因此,您必须在 for 循环或类似的东西中遍历每个玩家的 PlayerGui
。这种情况很少发生,如果有的话,请考虑尽可能避免这种情况,因为这是一个非常棘手的情况要尝试处理;您必须考虑特殊情况,例如玩家尚未获得StarterGui
的副本的可能性。
如果这个解释有任何令人困惑的地方,请告诉我;我会尽力解释得更好。
您可以在此处找到一些视觉效果来配合此解释以及有关官方 ROBLOX Wiki 对此主题的解释的进一步阅读:"Player vs. Starter GUIs"。
【讨论】:
以上是关于ROBLOX Studio ScreenGui 乐谱显示的主要内容,如果未能解决你的问题,请参考以下文章