为什么这段代码没有输出值?
2019-6-7 19:5:1
收藏:0
阅读:75
评论:2
问题
大家好,我正在编写一个基于 Lua 的游戏,我希望能够将 TextLabel 上的文本更改为当前比特币价格,并测试了一下,但是什么也没有显示。
我已经在 Google 上搜索了,发现我的代码似乎没有问题。
代码
Change = false
updated = false
while Change[true] do --当 Change 为 true 时执行
worth = math.random(1,4500) --生成一个随机数
print('Working!') --显示正在工作
Updated = true --更新 Updated 变量
end --结束循环
script.Parent.TextLabel.Text.Text = '比特币目前价格为:' .. worth
--让文本框显示新的价格
while Updated[false] do --当 Updated 为 false 时执行
wait(180) --等待
Change = true --等待三分钟后触发事件
end --结束循环
wait(180) --等待
Updated = false --重置脚本
我希望 Label 上显示一个随机数。
点赞
用户2860267
BJ Black 已经详细说明了语法问题,所以我将尝试解释一下 Roblox 部分。为了让这种方式在 Roblox 游戏中正常工作,请确认以下几点:
由于我们正在使用 TextLabel,请确认它是在 ScreenGui 还是 SurfaceGui 中。
- 如果它在 ScreenGui 中,请确保 ScreenGui 在 StarterGui 中,并且这段代码是在 LocalScript 中。
- 如果它在 SurfaceGui 中,请确保 SurfaceGui 装饰着一个 Part,并且这段代码是在 Script 中。
经确认所有的部分之后,可能更接近您想要的结果是:
-- 定义我们正在使用的变量
local textLabel = script.Parent.TextLabel
local worth = 0
-- 创建一个无限循环
spawn(function()
while true do
-- 选择随机数
worth = math.random(1,4500)
-- 使用新值更新标签的文本
textLabel.Text = string.format("Bitcoin is currently worth: %d", worth)
-- 等待 3 分钟,然后重复
wait(180)
end
end)
我移除了 Updated 和 Changed,因为它们只是决定是否更改数值。您的循环流程如下:
- 什么也不做,显示未定义的数字。等待 3 分钟。
- 更新数字。显示它,等待 6 分钟。
- 重复 1 和 2。
所以希望这样更清晰,更接近您想要的结果。
2019-06-07 21:17:37
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我不太了解 roblox,但是你的代码中存在几个明显的问题:
你的代码中大小写混淆("Updated","Change" 大写,"updated","change" 在注释的 while 语句中小写)会导致错误。例如:
bj@bj-lt:~$ lua Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio > Updated = true > print(Updated) true > print(updated) nil因此,请非常小心标识符的大小写。一般来说,大多数程序员将变量保持全小写(或者有时是驼峰大小写)的格式。我想可能会有一些特殊的 lua 运行环境是不区分大小写的,但我不知道有哪些。
"Updated" 是一个布尔值(一个 true/false 值),因此 "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 change == true do" 也是错误的,因为大小写不正确("While" 不是有效的 lua,但 "while" 是有效的)。
你基本上要尽快随机更改 "worth" 变量的值(它在一个循环中),并将一个标签的值设置为相应的值(它看起来可能需要不断更改)。这需要两个线程的操作(一个用于更改价值,另一个用于读取并将其放在标签上)。你的代码就好像你假设你有一个电子表格或类似的东西。实际上,你的代码正在做以下事情:
代码的剩余部分永远不会运行,因为代码的其余部分不在后台线程中(基本上第一部分掌握了运行时间并且从不让出,以至于其他代码永远无法执行)。
最后,即使顶部的代码在后台运行,你仅仅将 Text 标签设置为一次,恰好为 "Bitcoin is currently worth: 3456"(或类似的数字)。从代码的编写方式来看,不会有任何之后的更新(如果它在另一线程运行之前运行一次,则可能根本不会设置为任何有用的东西)。
我猜测你的运行时可能由于标识符问题和/或运行时非常紧凑而导致错误,并且实际上没有到达标签刷新逻辑。