Главная > Tower Defense 1 > Отчет #04. Проблема с обработкой кнопок

Отчет #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)
	{
		// Нужный код здесь
	}
}
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.