2017-01-23 27 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