Starling AS3触摸事件按住不放。

5

我已经搜索了一段时间,寻找一个清晰的例子来编写一个允许用户按住按钮的代码。当这种情况发生时,我想执行一些代码。

我已经实现了TouchEvent.Touch和touchPhase.Began,但它只会触发一次。

我找不到一个清晰的解释来实现这个功能。任何帮助都将不胜感激。

btnPress.addEventListener(TouchEvent.TOUCH, isPressed);

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

10

首先,Starling的TouchEventTouchPhase可能会让人有些困惑。当用户开始触摸屏幕时,TouchPhase.BEGAN只会触发一次。如果您想在手指按住按钮时执行某些代码,可以在TouchPhase.BEGAN阶段开始执行,并在TouchPhase.ENDED阶段停止执行(该阶段也仅触发一次,即当用户停止触摸屏幕时)。

例如,在您的情况下,您可以这样做:

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!");
}

希望这有助于澄清事情!


谢谢。TouchPhase 在一开始可能有点令人困惑。 - puks1978

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接