是否有原因导致此代码未输出价值

时间:2019-06-07 19:05:00

标签: lua roblox

问题

您好,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上的输出是随机数。

2 个答案:

答案 0 :(得分:3)

我真的不能和roblox对话,但是您的代码有两个明显的问题:

  1. 案例

您对大写字母(“ 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运行时不区分大小写,但是我不知道。

  1. 滥用类型。

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”也是错误的。

最后:

  1. 缺少线程。

您基本上想同时做两件事,即尽可能快地随机更改“ worth”变量(它处于循环中),并看到一个与之匹配的标签(看起来像您可能希望它不断变化)。这需要两个操作线程(一个用于更改价值,另一个用于读取并粘贴在标签上)。假设您有电子表格之类的东西,就这样写。您的代码实际上在做什么:

  • 设置一些变量
  • 无限期更新价值,打印“工作中!”一堆,然后...
  • 永不停止

剩余的代码永远不会运行,因为剩余的代码不在后台线程中(基本上,第一位垄断了运行时,而不会屈服于其他所有东西)。

最后,即使顶部代码在后台运行,您也只能一次将“文本”标签设置为完全“当前比特币价值:3456”(或类似的数字)。编写方式此后将不会进行任何更新(并且,如果在另一个线程预热之前运行一次,则可能根本不会将其设置为任何有用的东西)。

我的猜测是,由于标识符问题,您的运行时会左右散开错误,并且/或者运行在紧密的无限循环中,并且从未真正进入标签刷新逻辑。

答案 1 :(得分:1)

BJ Black对语法问题进行了出色的描述,因此,我将尝试涵盖Roblox。为了使这种事情在Roblox游戏中正常运行,请仔细检查以下假设:

  • 由于我们正在使用TextLabel,因此它是否位于ScreenGui中?还是SurfaceGui?
    • 如果它在ScreenGui中,请确保ScreenGui在StarterGui中,并且此代码在LocalScript中
    • 如果在SurfaceGui中,请确保SurfaceGui在装饰部件,并且此代码 在脚本中

检查所有这些部分之后,也许这更接近您的想法:

-- 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)

我删除了UpdatedChanged,因为他们所做的只是决定是否更改值。循环流为:

  1. 不执行任何操作,并显示未定义的数字。等待3分钟
  2. 更新号码,显示它,等待6分钟
  3. 重复1和2。

所以希望这可以使您更清楚,更接近您的想法。