2012-04-01 8 views
0

Ich habe ein "Seed" -Objekt, das eine Instanz-Methode seed:fall() hat, die von meiner update-Funktion aufgerufen wird (die jedes Bild ausführt). Ich habe einen "touch" -Ereignis-Listener, damit der Benutzer ihn ziehen kann. Wenn es jedoch gezogen wird, versucht es immer noch zu fallen, wodurch die Drag-Interaktion störend wird.Corona SDK - eine Variable für die Dauer eines Ziehereignisses ändern

Ich habe eine Instanzvariable zu meiner Seed "Klasse" namens seed.falling hinzugefügt. Die Funktion Fall() prüft nun, ob seed.falling wahr ist, bevor der Seed den Bildschirm heruntergefahren wird. Der nächste Schritt besteht darin, seed.falling auf false zu setzen, wenn der Ziehvorgang beginnt, und ihn dann auf true zurückzusetzen, wenn der Ziehvorgang beendet wird. Ich kann diesen letzten Teil nicht herausfinden.

Irgendwelche Ideen jemand? Gibt es ein "stop dragging" -Ereignis, für das ich einen Listener einstellen könnte, um wieder auf seed.falling zu schalten? Gibt es eine schönere Art zu erreichen, was ich will?

+1

Verwenden Sie die "Touch" -Ereignisphasen: "begonnen", "bewegt" und "beendet"? – Corey

Antwort

2
physics.start() 
physics.setGravity(0,1) 
local dd = display.newRect(400,100,200,200) 
physics.addBody(dd,"dynamic") 
dd:addEventListener("touch", function(event) 
    if event.phase == "began" then 
     dd.bodyType = "static" 
    elseif event.phase == "moved" then 
     dd.x,dd.y = event.x,event.y 
    elseif event.phase == "ended" then 
     dd.bodyType = "dynamic" 
    end 
end) 

Ich denke, dass dieser Fall ist, was Sie wollen?

+0

Ich habe keine Physik auf dem Objekt, aber ich habe das event.phase Attribut verwendet, um die Situation zu behandeln - siehe meine Antwort. –

1

Nur für den Rekord, hier ist, wie ich das gelöst habe.

Grundsätzlich habe ich ein Attribut "seed.falling", das die seed: fall-Methode vor dem Verschieben des Seeds prüft. Und ich setze dieses Attribut auf "false", wenn wir nicht in der "beendeten" Phase des Ziehereignisses sind, was den Seedfall stoppt.

function Seed:new(x,y) 
    print("Seed:new, x = " .. (x or nil) .. ", y = " .. (y or nil)) 
    local seed = display.newImage("seed_icon.png") 
    seed.x = x 
    seed.y = y 
    seed.name = 'seed' 
    seed.falling = true 

    function seed:fall() 
    if(self.falling) then 
     self.y = self.y + 1 
    end 
    end 

    function seed:drag(event) 
    seed.x = event.x 
    seed.y = event.y 
    if(event.phase == "ended") then 
     seed.falling = true 
    else 
     seed.falling = false 
    end 
    end  

    seed:addEventListener("touch", drag) 

    return seed 
end  

function drag(event) 
    seed = event.target 
    seed:drag(event) 
end  

Es ist nicht eine sehr gute Lösung, die ich denke, da sie die Samen manchmal auf dem Bildschirm gestrandet Blätter - möglicherweise, wenn Sie einen Samen über einen anderen fallenden Samen ziehen.

Verwandte Themen