0

我是编码的业余爱好者。所以,如果我面对一些事情,请注意我。

无论如何,我正在为正在制作的操作系统制作 alpha 阶段吗?我正在制作我的安装程序。两个问题。我可以从 pastebin 中获取代码然后让我的 lua 脚本下载吗?二。我将代码的“打印”部分放在 cmd 中。我得到“非法字符”。我不知道出了什么问题。这是我的代码。

 --Variables
Yes = True
No = False
--Loading Screen
print ("1")
sleep(0.5)
print("2")
sleep(0.5)
print("Dowloading OS")
sleep(2)
print("Done!")
sleep(0.2)
print("Would you like to open the OS?")
end
4

2 回答 2

3

我发现您的代码存在一些问题。

首先,TrueandFalse都是无意义的名字——除非你之前给它们分配了一些东西,否则它们都等于nil. 因此,您的YesNo变量也都设置nil为。这并不是因为 lua 中不存在 true 和 false ——它们只是小写的:truefalse. 创建YesNo变量是多余的并且难以阅读 - 只需直接使用truefalse

其次,如果您使用的是从他们的网站下载的标准 lua,sleep则不是一个有效的功能(尽管它在 Lua 的 Roblox 版本中,或者我听说过)。和大写一样True,默认False是 sleep nil,所以调用它是行不通的。根据您正在运行的内容,os.execute("sleep " .. number_of_seconds)如果您在 Mac 上或os.execute("timeout /t " .. number_of_seconds)在 PC 上,您将希望使用它。你可能想把这些包装成一个function

function my_sleep_mac(number_of_seconds)
    os.execute("sleep " .. number_of_seconds)
end

function my_sleep_PC(number_of_seconds)
    os.execute("timeout /t " .. number_of_seconds)
end

至于您遇到的具体错误,我认为这是由于您的end声明是程序的结尾。 endin lua 并没有完全按照你的想法做——它没有指定程序的结束。Lua 可以通过查看文件中是否有任何文本来确定程序的结束位置。不说不知道是各个子代码块在哪里结束,IEif语句的分支,functions等。例如,假设你写代码

print("checking x...")
if x == 2 then
print("x is 2")
print("Isn't it awesome that x is 2?")
print("x was checked")

lua 无法知道最后一条语句(打印x已检查)是否应该仅在x2 或始终发生时才发生。因此,您需要明确说明您使用end. 但是,对于文件,这是不必要的,实际上会导致错误。这是if带有end介绍的声明

print("checking x...")
if x == 2 then
print("x is 2")
print("isn't it awesome that x is 2?")
end
print("x was checked")

尽管 lua 并不关心,但缩进这些代码部分是一个非常好的主意,这样您就可以一眼看出它的开始和结束位置:

print("checking x...")
if x == 2 then
    print("x is 2")
    print("isn't it awesome that x is 2?")
end
print("x was checked")

关于您的“pastebin”问题,您将不得不更加具体。

于 2013-04-25T05:33:29.967 回答
0

您可以sleep以独立于操作系统(但 CPU 密集型)的方式实现:

local function sleep(seconds)
  local t0 = os.clock()
  repeat
  until os.clock() - t0 >= seconds
end
于 2013-04-25T06:00:18.610 回答