web-dev-qa-db-fra.com

Comment ajouter un "sommeil" ou "attente" à mon script Lua?

J'essaie de faire un script simple pour un jeu, en changeant l'heure de la journée, mais je veux le faire rapidement. Voilà donc ce dont je parle:

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

etc. Comment pourrais-je procéder?

12
Donavon Decker

Lua ne fournit pas de fonction sleep standard, mais il existe plusieurs façons de l'implémenter, voir Fonction Sleep pour plus de détails.

Pour Linux, cela peut être le plus simple:

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

Sous Windows, vous pouvez utiliser ping:

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

Celui qui utilise select mérite une certaine attention car c'est le seul moyen portable d'obtenir une résolution en moins d'une seconde:

require "socket"

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

sleep(0.2)
19
Yu Hao

Si vous avez installé Luasocket:

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

wxLua a trois fonctions de sommeil:

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)
2
Lorenzo Donati

Cette fonction homebrew a une précision jusqu'à un dixième de seconde ou moins.

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