如何解决如何让字符串中的每个字符像在游戏中一样顺序出现在控制台中? (Lua)
我正在尝试在 Lua 中编写一个函数,它基本上应该在每次调用函数时给定一段文本作为输入参数后按顺序将每个字符写出到控制台。因此,例如,如果我调用该函数并将“Hello World”作为参数,我希望该函数一次一个地将每个字符按顺序打印到控制台(每个字符之间有给定的时间,因此创建一个一种字母的“流动”)。我一直在研究的函数在技术上完成了我想要它做的事情,但是它根本不显示任何文本,直到循环完全完成对字符串中的每个字符的迭代。因此,如果我想在打印每个字符之间以一秒的时间向控制台显示“hello”,则大约需要 5-6 秒才能显示任何文本(并且当它出现时,它将是完整的字符串)。我已经尝试以我能想到的任何方式重新组织该函数,但我想不出任何其他方式来在没有循环的情况下按顺序输出每个字符。这只是一个Lua问题吗?我见过同样的一般问题,但对于 C#,似乎它们都以相同的方式工作 (How to make text be "typed out" in console application?)。此外,作为记录,我正在一个名为“repl.it”的在线 IDE 中进行编码,我并没有放弃这可能是一个问题的想法。提前致谢。
--[[ Delay function --]]
function wait(seconds)
local start = os.time()
repeat until os.time() > start + seconds
end
--[[ Function for "saying" things --]]
function say(string)
speakchar = {}
speakindex = 1;
for c in (string):gmatch"." do
table.insert(speakchar,c);
io.write(speakchar[speakindex])
wait(1);
speakindex = speakindex + 1;
end
print("");
end
解决方法
您需要刷新输出缓冲区。这是简化的代码:
function say(string)
for c in (string):gmatch"." do
io.write(c):flush()
wait(1);
end
io.write("\n")
end