您好,StackOverflow社区!我正在开发这款Lua游戏,并且正在测试是否可以将TextLabel上的文本更改为当前的比特币价值,当什么都没有出现时,我感到非常失望。
我试图在Google上进行研究,但是我的代码似乎是正确的。
Change = false
updated = false
while Change[true] do --While change = true do
worth = math.random(1,4500) --Pick random number
print('Working!') --Say its working
Updated = true --Change the updated local var.
end --Ending while loop
script.Parent.TextLabel.Text.Text = 'Bitcoin is currently worth: ' .. worth
--Going to the Text, and changing in to a New worth.
while Updated[false] do --While updated = false do
wait(180) --Wait
Change = true --After waits 3 minutes it makes an event trigger
end -- Ending while loop
wait(180) --Wait
Updated = false --Reseting Script.
我希望Label上的输出是随机数。
答案 0 :(得分:3)
我真的不能和roblox对话,但是您的代码有两个明显的问题:
您对大写字母(“ Updated”,“ Change”)和小写字母(“ updated”,“ change” [在声明中的注释中])之间的混淆会失败。参见,例如:
bj@bj-lt:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> Updated = true
> print(Updated)
true
> print(updated)
nil
因此,请务必谨慎使用大写的标识符。通常,大多数程序员都将变量留在小写形式(或有时使用诸如camelCase之类)。我想可能有一些奇怪的lua运行时不区分大小写,但是我不知道。
Updated是一个布尔值(真/假值),因此语法为:
while Change[true] do
...无效。参见:
> if Updated[true] then
>> print("foo")
>> end
stdin:1: attempt to index global 'Updated' (a boolean value)
stack traceback:
stdin:1: in main chunk
[C]: in ?
还请注意,由于大小写(“ While”不是有效的lua,但“ while”是有效的),“ While change == true do”也是错误的。
最后:
您基本上想同时做两件事,即尽可能快地随机更改“ worth”变量(它处于循环中),并看到一个与之匹配的标签(看起来像您可能希望它不断变化)。这需要两个操作线程(一个用于更改价值,另一个用于读取并粘贴在标签上)。假设您有电子表格之类的东西,就这样写。您的代码实际上在做什么:
剩余的代码永远不会运行,因为剩余的代码不在后台线程中(基本上,第一位垄断了运行时,而不会屈服于其他所有东西)。
最后,即使顶部代码在后台运行,您也只能一次将“文本”标签设置为完全“当前比特币价值:3456”(或类似的数字)。编写方式此后将不会进行任何更新(并且,如果在另一个线程预热之前运行一次,则可能根本不会将其设置为任何有用的东西)。
我的猜测是,由于标识符问题,您的运行时会左右散开错误,并且/或者运行在紧密的无限循环中,并且从未真正进入标签刷新逻辑。
答案 1 :(得分:1)
BJ Black对语法问题进行了出色的描述,因此,我将尝试涵盖Roblox。为了使这种事情在Roblox游戏中正常运行,请仔细检查以下假设:
检查所有这些部分之后,也许这更接近您的想法:
-- define the variables we're working with
local textLabel = script.Parent.TextLabel
local worth = 0
-- create an infinite loop
spawn(function()
while true do
--Pick random number
worth = math.random(1,4500)
-- update the text of the label with the new worth
textLabel.Text = string.format("Bitcoin is currently worth: %d", worth)
-- wait for 3 minutes, then loop
wait(180)
end
end)
我删除了Updated
和Changed
,因为他们所做的只是决定是否更改值。循环流为:
所以希望这可以使您更清楚,更接近您的想法。