在Lua中睡眠而不禁止之前的命令

在 Lua 中,没有简单的方法可以让程序等待一段时间后再执行后面的代码。为了解决这个问题,我创建了一个函数:

local clock = os.clock
function sleep(n)  -- 秒
   local t0 = clock()
   while clock() - t0 <= n do
   end
end

然后我将它应用到一些代码中:

player:applyLinearImpulse(0, -14, player.x, player.y)
sleep(1)

这段代码的目的是先向下施加一个线性冲量然后暂停游戏。然而,实际上这只是在施加冲量之前就将游戏暂停了。一般来说,我该如何确保之前的命令在 sleep 函数之前完成执行?

点赞
用户869951
用户869951

在 Corona 中,对象的动态操作(例如施加冲量、移动、启动计时器等)实际上只有在代码返回后才会“执行”。您需要使用 timer.performWithDelay(1, function() sleep(1) end)

一旦定时器回调运行,GUI 仅在回调(sleep)返回后更新,因此您的 GUI 将在 1 秒钟期间被冻结。那似乎是您正在寻找的效果,但通常您并不希望冻结 GUI。

2014-06-02 17:00:55