Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 在Lua睡觉而不禁止之前的命令_Timer_Lua_Delayed Execution - Fatal编程技术网

Timer 在Lua睡觉而不禁止之前的命令

Timer 在Lua睡觉而不禁止之前的命令,timer,lua,delayed-execution,Timer,Lua,Delayed Execution,在Lua中,没有一种简单的方法可以让你在所需的时间内入睡。为了解决这个问题,我创建了一个函数,它可以为我做到这一点: local clock = os.clock function sleep(n) -- seconds local t0 = clock() while clock() - t0 <= n do end end 目标是在地面上施加线性脉冲,然后冻结游戏。然而,这只是在应用冲动之前冻结了游戏。一般来说,如何确保在睡觉前执行上一个命令?在Corona中,对

在Lua中,没有一种简单的方法可以让你在所需的时间内入睡。为了解决这个问题,我创建了一个函数,它可以为我做到这一点:

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

目标是在地面上施加线性脉冲,然后冻结游戏。然而,这只是在应用冲动之前冻结了游戏。一般来说,如何确保在睡觉前执行上一个命令?

在Corona中,对对象的动态操作(如应用脉冲、移动、启动计时器等)实际上只有在代码返回后才“生效”。您必须使用
timer.performWithDelay(1,function()sleep(1)end)


一旦计时器回调运行,GUI将仅在从该回调返回时更新(
sleep
),因此您的GUI将在1秒内冻结。这似乎就是您想要的效果,尽管通常您不想冻结GUI

似乎
applylinearpulse
函数在某个主循环的下一次迭代中生效,而
sleep
函数阻止您返回该主循环。大多数事件系统/主循环都内置了某种形式的计时器,但我们需要知道您正在处理的事件系统/主循环,以帮助您调整
睡眠功能。
player:applyLinearImpulse(0, -14, player.x, player.y)
sleep(1)