Нажмите и удерживайте сенсорное событие Starling AS3

Некоторое время я искал ясный пример того, как кодировать кнопку, которая позволяет пользователю нажимать и удерживать. Пока это происходит, я хотел бы выполнить некоторый код.

Я реализовал 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 ответ

Решение

Скворец TouchEvent а также TouchPhase может быть немного запутанным на первый взгляд. 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!");
}

Надеюсь, это поможет немного прояснить ситуацию!

Другие вопросы по тегам