18

我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本,但我想快速完成。所以这就是我要说的:

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

等等。我该怎么做呢?

4

9 回答 9

30

Lua 没有提供标准sleep函数,但是有几种方法可以实现其中的一种,详见睡眠函数

对于 Linux,这可能是最简单的一个:

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

在 Windows 中,您可以使用ping

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

使用的方法select值得关注,因为它是获得亚秒级分辨率的唯一便携方式:

require "socket"

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

sleep(0.2)
于 2013-08-01T07:30:04.687 回答
6

If you have luasocket installed:

local socket = require 'socket'
socket.sleep(0.2)
于 2017-05-26T12:43:35.347 回答
5

这个自制函数的精度低至十分之一秒或更小。

function sleep (a) 
    local sec = tonumber(os.clock() + a); 
    while (os.clock() < sec) do 
    end 
end
于 2016-11-10T09:43:18.907 回答
4

wxLua有三个睡眠函数:

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)
于 2013-08-19T02:03:03.757 回答
1

我需要一些简单的投票脚本,所以我尝试了Yu Hao's answeros.execute中的选项。但至少在我的机器上,我不能再用+终止脚本。所以我尝试了一个非常相似的函数,而这个函数确实允许提前终止。CtrlCio.popen

function wait (s)
    local timer = io.popen("sleep " .. s)
    timer:close()
end
于 2021-06-23T19:25:08.213 回答
0

我知道这是一个非常古老的问题,但我在做某事时偶然发现了它。这是一些对我有用的代码...

time=os.time()
wait=5
newtime=time+wait
while (time<newtime)
do
  time=os.time()
end

我需要随机化,所以我添加了

math.randomseed(os.time())
math.random(); math.random(); math.random()
randwait = math.random(1,30)
time=os.time()
newtime=time+randwait
while (time<newtime)
do
  time=os.time()
end
于 2021-11-19T17:20:30.333 回答
0

你应该阅读这个: http: //lua-users.org/wiki/SleepFunction

有几种解决方案,每一种都有描述,了解这一点很重要。

这就是我使用的:

function util.Sleep(s)
    if type(s) ~= "number" then
        error("Unable to wait if parameter 'seconds' isn't a number: " .. type(s))
    end
    -- http://lua-users.org/wiki/SleepFunction
    local ntime = os.clock() + s/10
    repeat until os.clock() > ntime
end
于 2022-01-01T16:27:40.777 回答
0

如果您使用的是基于 MacBook 或 UNIX 的系统,请使用以下命令:

function wait(time)
if tonumber(time) ~= nil then
os.execute("Sleep "..tonumber(time))
else
os.execute("Sleep "..tonumber("0.1"))
end
wait()
于 2021-01-24T03:28:12.260 回答
-2
function wait(time)
    local duration = os.time() + time
    while os.time() < duration do end
end

这可能是向脚本添加等待/睡眠功能的最简单方法之一

于 2021-01-02T18:14:45.630 回答