Отчет #04. Проблема с обработкой кнопок
Сложно писать программу, когда вместо того, чтобы просто реализовать задуманное приходиться сначала находить как это сделать. Сегодня продолжил работу с окном «Upgrade», большая часть времени ушла на реализацию скроллирования игровых предметов в активной закладке.
Скроллирование происходит после нажатия на кнопку «вправо» или «влево» и происходить не мгновенно, а с плавной анимацией. Несмотря на то, что анимация происходит довольно быстро очень хорошей практикой является отключить обработку других кнопок в окне на это время. В моем случае особой необходимости в этом нет, но вообще нетерпеливые пользователи часто вызывают ошибку нажимая на кнопку прежде чем программа перейдет в нужное состояние.
Отключить кнопку на Flash очень легко:
button_name.enabled = false;
Вот только для ActionScript 3.0 это не работает! Вернее работает, но лишь частично – кнопка перестает реагировать на наведение курсора, но если кликнуть на нее, то действие будет произведено. Ошибка происходит из-за используемой в ActionScript 3.0 модели обработки событий. Код, который назначает обработчик на кнопку такой:
button_name.addEventListener(MouseEvent.CLICK, onMouseClickHadler);
Это единственный способ назначения обработчика, который мне удалось найти и он, в том числе, приведен в официальной документации на сайте Adobe. Событие же от мыши не обращает никакого внимание на параметр «enabled» кнопки, что в некотором роде даже и правильно.
Сделать обработку корректной можно добавив дополнительную проверку в обработчике:
private function onMouseClickHadler(evt:MouseEvent):void { var my_bt = evt.target; if(my_bt.enabled) { // Нужный код здесь } }







