2017-01-23 70 views
-2

我试过我该如何等待LOVE2D中的条件?

timer.script(function(wait) 
repeat 
    wait(0) 
until condiction 
end) 

,但没有奏效。请帮帮我!

+1

没有工作,是不是正确的错误描述。请阅读[问] 也不清楚你在等待什么,如果你想等待或没有做其他事情。你还应该提供更多的代码和上下文。什么是timer.script?我只能假设它来自HUMP库,如果你什么都不做,只等0秒会发生什么? – Piglet

+0

您是否正在寻找一个在给定事件上被调用的函数(即每次按下某个键时触发的按键的回调函数)或类似于do-while循环的函数? – Thelmund

+0

我用hump.timer和timer.script是一种使用'wait'而不是'timer.after'的方法 – arthurgps2

回答

0

timer.script并不是真的为你想要做的事情设计,尽管它可能有可能得到它的工作。

LÖVE框架是围绕draw()update()回调建立的,我建议学习如何使用这些回调来完成这个任务,然后继续研究这些回调之上的方法。这样的事情应该运行您的代码只有一次,当第一次见到你的条件:

local hasHappened = false 
function love.update(dt) 
    if (condition and not hasHappened) then 
    hasHappened = true 
    -- respond to condition here 
    end 
end 

通常情况下,你就不会直接在love.update()检查你的病情。相反,您将拥有一个包含游戏中所有对象的表格,并在love.update()中循环显示该对象表格,并在每个对象上调用update()方法。这给每个对象一个机会来检查不同的条件并对它们做出响应。

另一种方法是命名您的条件,并使用事件系统(如beholder)在情况发生时触发事件(以及任何已注册的回调函数)。

或(前提是您的计时器的update()被调用在love.update()),你可以用你的计时器对象做到这一点和every()方法:

local handle = timer:every(0.01, function() 
    if condition then 
    -- unregister timer, assuming you only want the code to be run once 
    timer:cancel(handle) 

    -- respond to condition here 
    end 
end) 
+0

如何使用timer.cancel? – arthurgps2

+0

arturgps2:“计时器”实际上更像是一个时钟而不是计时器,因为它同时管理多个计时器。为了取消一个定时器,就像上面的代码示例中的'every()'一样,你需要像上面那样存储一个句柄(一个引用)到那个特定的':every()'定时器,并且将它作为'cancel()'的第一个参数。注意使用冒号':cancel'而不是点符号'.cancel',因为这是一个方法调用。这就是我所能想到的一切,如果你有更多的问题,你需要更具体一些。 –

+1

其实我忘了把'timer.update'换成'love.update',但这个建议对我也有帮助。谢谢您的帮助。 – arthurgps2