2013-08-01 19 views
6

Sto provando a creare un semplice script per un gioco, cambiando l'ora del giorno, ma voglio farlo rapidamente. Quindi questo è quello di cui sto parlando:Come aggiungere un "sleep" o "wait" al mio Lua Script?

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

e così via. Come potrei fare questo?

+0

controllo anche [più facile-way-to-make-lua-script-aspetta-pausa-sonno-blocco-per-un-qualche-secondi] (http://stackoverflow.com/questions/1034334/easiest-way-to-make-lua-script-wait-pause-sleep-block-for-a-few-seconds) –

+0

Possibile duplicato di [Modo più semplice per fare lua script wait/pause/sleep/block per alcuni secondi?] (http://stackoverflow.com/questions/1034334/easiest-way-to-make-lua-script-wait-pause-sleep-block-for- a-pochi secondi) –

risposta

10

Lua non fornisce una funzione standard sleep, ma ci sono diversi modi per implementarne una, vedere Sleep Function per i dettagli.

Per Linux, questo può essere il più semplice:

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

In Windows, è possibile utilizzare ping:

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

quella che utilizza select merita una certa attenzione, perché è l'unico modo portabile per ottenere una sotto-seconda risoluzione:

require "socket" 

function sleep(sec) 
    socket.select(nil, nil, sec) 
end 

sleep(0.2) 
+1

Sto usando Windows 7 –

+0

@DonavonDecker Segui gli altri approcci nella l inchiostro allora. Ce ne sono diversi disponibili per Windows. Ad esempio, scrivendo un'estensione C –

+0

ho capito, ma quando provo l'altro metodo nel collegamento, viene visualizzato un errore che dice "tentativo di indicizzare globale 'os' valore nil" –

1

wxLua ha tre funzioni sleep:

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) 
1

Questa funzione homebrew ha una precisione fino a un decimo di secondo o meno.

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

non dimenticare che è un'attesa lunga, consumando tempo processore –

+0

Se vuoi che non ci sia da fare per Lua per l'uso in frame per videogiochi o applicazioni, forse wxLua o altre librerie possono fornire meno risorse per le funzioni sleep. La funzione sleep che fornisco è utile per il test dei bug, l'automazione in script più piccoli e progetti meno seri. – Mossarelli

2

Se avete luasocket installato:

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

Come installare il pacchetto lua? – Nishanth