Ich habeWie warte ich, bis eine Bedingung in LOVE2D gegeben ist?
versuchttimer.script(function(wait)
repeat
wait(0)
until condiction
end)
aber es hat nicht funktioniert. Bitte hilf mir!
Ich habeWie warte ich, bis eine Bedingung in LOVE2D gegeben ist?
versuchttimer.script(function(wait)
repeat
wait(0)
until condiction
end)
aber es hat nicht funktioniert. Bitte hilf mir!
timer.script nicht wirklich ist so konzipiert, für das, was Sie zu tun versuchen, obwohl es möglich sein, könnte es zur Arbeit zu kommen.
Das LÖVE-Framework ist um die Callbacks draw()
und update()
aufgebaut und ich würde empfehlen, zu lernen, wie man diese Aufgabe nur mit diesen Callbacks macht, bevor man zu Methoden über diese Callbacks geht. So etwas sollte der Code nur einmal ausgeführt, wenn Ihr Zustand zuerst erfüllt ist:
local hasHappened = false
function love.update(dt)
if (condition and not hasHappened) then
hasHappened = true
-- respond to condition here
end
end
Normalerweise würden Sie nicht, Ihren Zustand direkt in love.update()
. Stattdessen würden Sie eine Tabelle haben, die alle Objekte in Ihrem Spiel enthält, und in Sie durchlaufen diese Tabelle von Objekten und rufen Sie eine update()
Methode auf jedem. Das gibt jedem Objekt die Möglichkeit, auf unterschiedliche Bedingungen zu prüfen und darauf zu reagieren.
Ein alternativer Ansatz wäre, Ihre Bedingung zu benennen und ein Ereignissystem wie beholder zu verwenden, um das Ereignis (und alle gespeicherten Rückruffunktionen) auszulösen, wenn die Bedingung eintritt.
Or (sofern Ihr Timers update() wird in love.update()
genannt wird), könnten Sie es mit Ihrem Timer-Objekt tun und die every()
Methode:
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)
Wie benutze ich timer.cancel? – arthurgps2
arturpg2: Ein "Timer" ist eigentlich eher eine Uhr als ein Timer, da er mehrere Timer gleichzeitig verwaltet. Um einen Timer, wie das 'every()' im obigen Codebeispiel, abzubrechen, müssen Sie einen Handle (eine Referenz) zu diesem bestimmten ': every()' Timer speichern, wie oben beschrieben, und diesen übergeben als das erste Argument zu 'cancel()'. Beachten Sie die Verwendung des Doppelpunkts ': cancel' anstelle der Punktnotation' .cancel', da dies ein Methodenaufruf ist. Das ist alles, woran ich denken kann. Wenn Sie mehr Fragen haben, müssen Sie etwas genauer sein. –
Eigentlich habe ich "timer.update" in 'love.update' vergessen, aber dieser Vorschlag hat mir auch geholfen. Danke für die Hilfe. – arthurgps2
, die nicht funktioniert ist keine richtige Fehlerbeschreibung. Bitte lesen [ask] auch ist es nicht klar, worauf Sie warten und wenn Sie etwas anderes tun wollen, während Sie warten oder nicht. Sie sollten auch mehr Code und Kontext bereitstellen. Was ist timer.script? Ich kann nur annehmen, dass es aus der HUMP-Bibliothek stammt und ob, was erwartest du, wenn du nichts anderes tust, als auf 0 Sekunden zu warten? – Piglet
Suchen Sie nach einer Funktion, die für ein bestimmtes Ereignis aufgerufen werden soll (z. B. eine Rückruffunktion für einen Tastendruck, die bei jedem Drücken einer Taste ausgelöst wird) oder etwas, das einer Do-While-Schleife ähnelt? – Thelmund
Ich benutzte bump.timer und timer.script ist eine Möglichkeit, 'wait' anstelle von' timer.after' zu verwenden. – arthurgps2