2017-03-07 3 views
0

Hallo ich arbeite an einem Spiel und ich habe ein Objekt. Auf diesem Objekt habe ich Berührungsereignis. Ich habe eine Überprüfung auf die Berührung hinzugefügt, auch wenn die Berührung weniger als 250ms ist, halte es für einen Tipp, ansonsten halte es für eine Berührung. Beim Antippen erhöht sich der Wert um 10 Punkte. Ich möchte Werte um den Wert 1 dekrementieren, solange das Objekt I gedrückt wird, ich habe den Code hinzugefügt, aber es tut es nur einmal.Keep dekrementieren Wert auf lange drücken in Corona SDK

Die Frage ist: Wie kann ich einen Wert dekrementieren, solange ein Berührungsereignis aufgezeichnet wird? Der Code wird als Referenz zur Verfügung gestellt

local function countTaps(event) 
if event.phase == "began" then 
beganTime = event.time 
elseif event.phase == "ended" then 
endedTime = event.time 
if (endedTime - beganTime) < 250 then 
    climbUp() 
    return true 
else 
    climbDown() 
end 
end        

Allerdings bestimmt dieser Code die Berührung/Berührung, sobald es fertig ist. Was kann die bessere Laufzeitalternative sein?

Antwort

0

Wenn das Berührungsereignis beginnt, legen Sie einen Zeitgeber fest, der mit der Frequenz ausgelöst wird, die der Wert ändern soll. Wenn der Timer ausgelöst wird, rufen Sie eine Funktion auf, die Ihren Zähler ändert (vielleicht Ihre climbDown()).

Wenn die Berührung beendet ist, brechen Sie den Timer ab. Sie sollten sicherstellen, dass Sie das Ende dieser Berührung erkennen, auch wenn es nicht mehr auf Ihrer Taste ist. Sie erreichen dies, indem Sie den Fokus auf der Bühne wie in this guide erläutert verwalten. Weitere Informationen finden Sie in der Dokumentation für timer.*, speziell timer.performWithDelay() und timer.cancel().

+0

Weitere Informationen zu [timer] (https://docs.coronalabs.com/api/library/timer/performWithDelay.html), [timer.pause()] (https://docs.coronalabs.com/ api/library/timer/pause.html) und [timer.resume()] (https://docs.coronalabs.com/api/library/timer/resume.html) Funktionen sind hier nützlich. – ldurniat

+0

es führt es nur einmal aus, wenn ich sie wie angegeben hinzufügen. –

+0

Es gibt ein optionales Iterationsargument für 'performWithDelay()', das es wiederholt auslöst, wenn Sie den Wert 0 oder -1 angeben. Aus der Dokumentation: 'timer.performWithDelay (Verzögerung, Listener [, Iterationen])'. Um zum Beispiel 'climbDown' alle 200 ms (ungefähr) aufzurufen, würden Sie 'timer.performWithDelay (200, absteigen, -1)' verwenden. – GoojajiGreg