2017-01-23 1 views
-2

Ich habeWie warte ich, bis eine Bedingung in LOVE2D gegeben ist?

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

aber es hat nicht funktioniert. Bitte hilf mir!

+1

, 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

+0

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

+0

Ich benutzte bump.timer und timer.script ist eine Möglichkeit, 'wait' anstelle von' timer.after' zu verwenden. – arthurgps2

Antwort

0

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) 
+0

Wie benutze ich timer.cancel? – arthurgps2

+0

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. –

+1

Eigentlich habe ich "timer.update" in 'love.update' vergessen, aber dieser Vorschlag hat mir auch geholfen. Danke für die Hilfe. – arthurgps2

Verwandte Themen