我是Lua的新手,我正在为一个程序编写代码。该程序是写信和收集其他信件(有点像蠕虫程序)。但是,我希望这是定时的。 (我在计算机上这是一个用于我的世界的mod,但仍然使用Lua,所以我认为不重要)我正在使用os.PullEvent(“key”)以便我可以移动这封信,但是os。 pullEvent()将暂停程序直到满意为止。我的问题是我希望计时器能够在同一时间不断滴答作响。关于我如何做到这一点的任何想法?谢谢!
term.clear()
w = 1
h = 1
score = 0
function topLine()
term.setTextColor(colors.orange)
term.setCursorPos(5,1)
print("Score: ", score)
end
function randLoc()
w,h = math.random(2,50) , math.random(3,17)
term.setCursorPos(w,h)
term.setTextColor(colors.red)
print"O"
end
function drawBorder()
term.setTextColor(colors.blue)
term.setCursorPos(1,2)
print"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"X X"
print"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
end
function checkTouch()
if x ~= w or y ~= h then
term.setCursorPos(w,h)
term.setTextColor(colors.red)
print"O"
elseif x == w and y == h then
w,h = math.random(2,50) , math.random(3,17)
term.setCursorPos(w,h)
term.setTextColor(colors.red)
print"O"
score=score+1
end
end
x = 2
y = 3
randLoc()
while true do
topLine()
drawBorder()
checkTouch()
term.setCursorPos(x,y)
term.setTextColor(colors.lime)
print"T"
local e,move = os.pullEvent( "key" )
if move == 30 or move == 203 then
x=x-1
if x <= 1 then
x = 2
end
end
if move == 32 or move == 205 then
x=x+1
if x >= 51 then
x = 50
end
end
if move == 31 or move == 208 then
y=y+1
if y >= 18 then
y = 17
end
end
if move == 17 or move == 200 then
y=y-1
if y <= 2 then
y = 3
end
end
term.clear()
end
答案 0 :(得分:3)
您可以使用os.StartTimer()
生成"timer"
来自os.pullEvent()
答案 1 :(得分:0)
我不确定这是否能解答您的问题,但您可以看到一些代码需要多长时间才能运行:
local x = os.clock()
----------------------
---- Timed code ------
----------------------
print(string.format("Elapsed time: %.6f\n", os.clock() - x))
答案 2 :(得分:0)
我的计算机技术程序遵循这个&#34;多任务处理&#34;设计
local keepAlive = true
local function NetworkingLoop()
while true do
-- Do Networking
end
end
local function InputLoop()
while true do
-- Do Input
end
end
local function DrawingLoop()
while true do
-- Do drawing
end
end
local function KeepAlive()
while keepAlive do
os.sleep(1)
end
end
parallel.waitForAny(NetworkingLoop, InputLoop, DrawingLoop, KeepAlive)
NetworkingLoop
,InputLoop
,DrawingLoop
和KeepAlive
将在&#34;同一时间运行&#34;
(不是真的&因为lua不能这样做)
要将程序集keepAlive
(注意小写k
)停在false
的任何位置(在循环内)
答案 3 :(得分:0)
现在人们通常只在变量中使用os.startTimer,但是还有另一种方法涉及变量和函数中循环中的if语句
tick = 0
time = 0
function timer()
tick=tick+1
if tick == 60 then
time=time+1
tick=0
end
end
running=true
while running do
timer()
sleep(.1)
end
这是你在smilebasic中看到的东西,但你仍然可以重新评论这是lua。 现在添加它就像告诉它每一秒都告诉它打印一些东西
tick=0
time=0
running=true
function timer()
tick=tick+1
if tick==60 then
time=time+1
tick=0
end
if tick > 15 and tick < 30 then
print("it inbetween 15 - 30 please wait")
end
end
running=true
while running do
timer()
end
现在,只需在每次15-30个刻度之间打印该行文本。 这是我对这个主题的回答形成了问题。