Hoe voeg ik een “slaap” of “wacht” toe aan mijn Lua-script?

Ik probeer een eenvoudig script voor een spel te maken door de tijd van de dag te veranderen, maar ik wil het in een snelle beweging doen. Dus dit is waar ik het over heb:

function disco ( hour, minute)
setTime ( 1, 0 )
SLEEP
setTime ( 2, 0 )
SLEEP
setTime ( 3, 0 )
end

en ga zo maar door. Hoe zou ik dit doen?


Antwoord 1, autoriteit 100%

Lua biedt geen standaard sleep-functie, maar er zijn verschillende manieren om er een te implementeren, zie Slaapfunctievoor details.

Voor Linux is dit misschien wel de gemakkelijkste:

function sleep(n)
  os.execute("sleep " .. tonumber(n))
end

In Windows kunt u pinggebruiken:

function sleep(n)
  if n > 0 then os.execute("ping -n " .. tonumber(n+1) .. " localhost > NUL") end
end

Degene die selectgebruikt, verdient enige aandacht omdat het de enige draagbare manier is om een resolutie van minder dan een seconde te krijgen:

require "socket"
function sleep(sec)
    socket.select(nil, nil, sec)
end
sleep(0.2)

Antwoord 2, autoriteit 17%

Als je luasocket hebt geïnstalleerd:

local socket = require 'socket'
socket.sleep(0.2)

Antwoord 3, autoriteit 10%

wxLuaheeft drie slaapfuncties:

local wx = require 'wx'
wx.wxSleep(12)   -- sleeps for 12 seconds
wx.wxMilliSleep(1200)   -- sleeps for 1200 milliseconds
wx.wxMicroSleep(1200)   -- sleeps for 1200 microseconds (if the system supports such resolution)

Antwoord 4, Autoriteit 10%

Deze homebrew-functie heeft nauwkeurigheid tot een 10e van een seconde of minder.

function sleep (a) 
    local sec = tonumber(os.clock() + a); 
    while (os.clock() < sec) do 
    end 
end

Antwoord 5

Als u een MacBook- of Unix-systeem gebruikt, gebruikt u dit:

function wait(time)
if tonumber(time) ~= nil then
os.execute("Sleep "..tonumber(time))
else
os.execute("Sleep "..tonumber("0.1"))
end
wait()

Antwoord 6

Ik had iets eenvoudigs nodig voor een polling-script, dus ik probeerde de os.executeoptie van yu hao’s Antwoord . Maar op zijn minst op mijn machine, kon ik het script niet langer beëindigen met CTRL + C . Dus ik probeerde een zeer vergelijkbare functie met io.popenin plaats daarvan, en deze maakt vroegtijdige beëindiging toe.

function wait (s)
    local timer = io.popen("sleep " .. s)
    timer:close()
end

Antwoord 7

function wait(time)
    local duration = os.time() + time
    while os.time() < duration do end
end

Dit is waarschijnlijk een van de gemakkelijkste manieren om een ​​wacht- / slaapfunctie toe te voegen aan uw script

Other episodes