Вопрос AS3 - лучший способ блокировки кнопок - PullRequest
0 голосов
/ 10 мая 2011

Привет и спасибо за чтение этого. Я сделал кнопки, используя as3 внутри вспышки, но я хотел бы сделать их неактивными на несколько секунд при нажатии одной из них. Обычно я бы использовал Google для решения такого рода проблем, но я даже не знаю, как правильно это сформулировать. Спасибо

Ответы [ 3 ]

0 голосов
/ 10 мая 2011

Попробуйте использовать это как базовый класс для своих кнопок:

package
{
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;
    import flash.events.Event;

    public class MyButton extends SimpleButton
    {
        // vars
        public const DELAY:uint = 30;
        private var _timer:int = 0;

        /**
         * Constructor
         */
        public function MyButton()
        {
            addEventListener(MouseEvent.CLICK, _click);
        }

        /**
         * Called on Event.ENTER_FRAME
         */
        private function _handle(e:Event):void
        {
            _timer --;
            if(_timer < 1) removeEventListener(Event.ENTER_FRAME, _handle);
        }

        /**
         * Called on MouseEvent.CLICK
         */
        private function _click(e:MouseEvent):void
        {
            if(_timer > 0) return;

            _timer = DELAY;
            addEventListener(Event.ENTER_FRAME, _handle);

            // do your stuff below
            clickAction();
        }

        /**
         * Override this and fill with your actions
         */
        protected function clickAction():void
        {
            trace("override me");
        }
    }
}

Вот пример переопределения метода clickAction() в MyButton:

package
{
    public class MyPlayButton extends MyButton
    {
        override protected function clickAction():void
        {
            trace("play button clicked");
        }
    }
}
0 голосов
/ 10 мая 2011

Я бы сделал это просто установив свойство enabled кнопки на false в течение заданного промежутка времени, используя Timer после нажатия кнопки.

myBut.addEventListener(MouseEvent.CLICK, doStuff);

function doStuff(e:MouseEvent){
    //write whatever the button does here
    disableBut();
}

function disableBut(){
    myBut.enabled = false;
    var timer:Timer = new Timer(3000, 1);
    timer.addEventListener(TimerEvent.TIMER, enableBut);
    timer.start()
}

function enableBut(e:TimerEvent){
    myBut.enabled = true;
}

Помните, что время, в течение которого кнопка отключена, задается в первом параметре конструктора Timer() и составляет миллисекунды.В моем примере вы можете видеть, что myBut отключен на 3 секунды.

0 голосов
/ 10 мая 2011

Вы могли бы:

  • Установите для свойства .enabled значение false, чтобы отключить обработчики событий щелчка.
  • Добавьте новую переменную блокировки и окружите весь код в вашем обработчике кликов 'if (LockVariable)'. Тогда все, что вам нужно сделать, это установить значение false. В идеале, однако, вы бы просто отключили кнопку.

Что касается этого на несколько секунд, загляните в класс таймера. Эта ссылка должна быть полезной. Типичный шаблон выглядит примерно так:

var myTimer:Timer = new Timer(1000, 1); // 1 second
myTimer.addEventListener(TimerEvent.TIMER, runOnce);
myTimer.start();

function runOnce(event:TimerEvent):void {
trace("runOnce() called @ " + getTimer() + " ms");
}

Все, что вам нужно сделать, - это включить повторный вызов в качестве метода для строки 2, и ваша кнопка будет отключена на 1 секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...