2012-11-01 9 views
5

Ich bin seit einiger Zeit für ein klares Beispiel für das Kodieren einer Taste, die der Benutzer drücken und halten kann, gesucht. Während dies geschieht, möchte ich etwas Code ausführen.Starling AS3 Touch-Ereignis drücken und halten

Ich habe das TouchEvent.Touch und das TouchPhase.Began implementiert, aber es wird nur einmal ausgelöst.

Ich kann keine klare Erklärung finden, wie dies zu implementieren ist. Jede Hilfe wird geschätzt.

btnPress.addEventListener(TouchEvent.TOUCH, isPressed); 

private function isPressed(event:TouchEvent){ 
    var touch:touch = event.getTouch(btnPress, TouchPhase.BEGAN); 
    if(touch) 
    { 
     trace("pressed"); 
    } 
} 

Antwort

10

Star TouchEvent und TouchPhase kann zunächst etwas verwirrend sein. Die TouchPhase.BEGAN löst nur einmal, wenn der Benutzer anfängt, den Bildschirm zu berühren. Wenn Sie einen Code ausführen möchten, während sich der Finger auf der Taste befindet, starten Sie die Ausführung in der TouchPhase.BEGAN Phase und beenden Sie die Ausführung in der TouchPhase.ENDED Phase (die auch nur einmal ausgelöst wird, wenn der Benutzer den Bildschirm nicht mehr berührt).

Zum Beispiel in Ihrem Fall könnten Sie so etwas wie tun:

btnPress.addEventListener(TouchEvent.TOUCH, isPressed); 

private function isPressed(event:TouchEvent):void 
{ 
    var touch:Touch = event.getTouch(btnPress); 

    if(touch.phase == TouchPhase.BEGAN)//on finger down 
    { 
     trace("pressed just now"); 

     //do your stuff 
     addEventListener(Event.ENTER_FRAME, onButtonHold); 
    } 

    if(touch.phase == TouchPhase.ENDED) //on finger up 
    { 
     trace("release"); 

     //stop doing stuff 
     removeEventListener(Event.ENTER_FRAME, onButtonHold); 
    } 
} 

private function onButtonHold(e:Event):void 
{ 
    trace("doing stuff while button pressed!"); 
} 

Hope this etwas zu klären Dinge hilft!

+0

Vielen Dank. TouchPhases sind ein wenig verwirrend, um damit zu beginnen. – puks1978

+0

toll, danke! – ShoulO