Руководство по actionscript. часть 2, стр. 054

False. 0.

true);

}

После выполнения предыдущего кода единственной ссылкой на анонимную функцию в программе является ссылка, хранящаяся в экземпляре Stage. Поскольку анонимная функция была зарегистрирована с использованием параметра использоватьСлабуюСсылку, для которого было установлено значение true, она сразу же становится пригодной для сборки мусора. Таким образом, сборщик мусора по своему усмотрению может впоследствии автоматически исключить анонимную функцию из списка приемников экземпляра Stage и удалить ее из памяти.

Безусловно, тот факт, что анонимная функция пригодна для сборки мусора, совершенно не означает, что она будет удалена из памяти. На самом деле в случае с предыдущим простым примером, функция, скорее всего, не будет удалена из памяти, поскольку объем используемой приложением памяти недостаточен для запуска механизма сборки мусора. В результате функция будет продолжать выполняться при получении события MouseEvent. MOUSE_MOVE экземпляром Stage, хотя теоретически она может быть удалена из памяти в любой момент времени. Из этого следует, что вообще не следует полагаться на параметр исполь — зоватьСлабуюСсылку как на способ автоматического удаления приемников событий. Наилучшее решение — просто избегать появления заброшенных приемников событий.

*^ | Если вы регистрируете приемник события в каком-либо объекте, убедитесь, что ваша м& d m программа с течением времени также отменяет регистрацию этого приемника.

До сих пор в этой главе мы работали исключительно с предопределенными событиями языка ActionScript. Теперь рассмотрим процесс создания в программе своих собственных пользовательских событий.

Пользовательские события

Чтобы выполнить диспетчеризацию нового пользовательского события в языке ActionScript, достаточно расширить класс EventDispatcher, присвоить новому событию имя и вызвать метод экземпляра dispatchEvent ( ) класса EventDispatcher. Для изучения процесса создания пользовательских событий в программе мы рассмотрим два примера: в первом событие создается для игры, а во втором — для элемента пользовательского интерфейса.

‘ * . I Если вы хотите сделать получателем события экземпляр класса, который уже рас-м$4г« ширяет другой класс, используйте композиционный подход, рассмотренный в гл. 9: Яу непосредственно реализуйте интерфейс IEventDispatcher и используйте методы класса EventDispatcher не через наследование, а через композицию.

Пользовательское событие «gameOver»

Предположим, что мы создаем универсальный каркас для разработки видеоигр. Каркас включает в себя следующие два класса: класс Game, выполняющий основные функции, необходимые для любой видеоигры, и класс Console, который представляет панель для запуска новых игр. Каждый раз при запуске новой игры класс Console создает объект класса Game. Любой экземпляр класса Game, создаваемый классом Console, является получателем пользовательского события «gameOver», которое возникает после окончания игры.

Чтобы объекты класса Game могли выступать в роли получателей событий, класс Game расширяет класс EventDispatcher, как показано в следующем коде:

package { import flash. events.*;

public class Game extends EventDispatcher { }

}

Кроме того, в классе Game определена константа Game. GAME_OVER, значением которой является имя пользовательского события: «gameOver». По соглашению имена констант событий записываются полностью прописными буквами, а слова разделяются знаком подчеркивания, например: GAME_OVER. Константы пользовательских событий обычно определяются либо в классе получателя события (в данном случае в классе Game), либо, если используется подкласс класса Event, в этом подклассе (как показано в нашем следующем примере с элементом пользовательского интерфейса). Поскольку в нашем текущем примере подклассы класса Event не используются, определим константу для события «gameOver» в классе Game, как показано в следующем коде:

package { import flash. events.*;

public class Game extends EventDispatcher { public static const GAME OVER:String = «gameOver»;

}

}

Когда игра завершается, объект Game вызывает метод endGame ( ), который возвращает игровую среду в исходное состояние, что позволит начать новую игру. Вот код метода endGame ( ):

package { import flash. events.*;

public class Game extends EventDispatcher { public static const GAME_0VER:String = «gameOver»;

private function endGame ( ):void { // Выполнение действий для завершения игры (код не показан)

}

}

}

Когда все действия, завершающие игру, выполнены, метод endGame ( ) использует метод dispatchEvent ( ), чтобы приступить к диспетчеризации события Game. GAME_OVER, сигнализирующего об окончании игры:

package { import flash. events.*;

public class Game extends EventDispatcher { public static const GAME_0VER:String = «gameOver»;

private function endGame ( ):void { // Выполнение действий для завершения игры // (код не показан)

// …после чего просим среду Flash выполнить

// диспетчеризацию события, обозначающего окончание игры

dispatchEvent(new Event(Game. GAME_OVER));

}

}

}

Обратите внимание, что, поскольку метод dispatchEvent ( ) вызывается над

объектом Game, этот объект и является получателем события.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 033
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.118
  • 01.11.2011">Первые нейросинаптические процессоры
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 115
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.12
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.24
  • 06.10.2010">Установка локального сервера на компьютер
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.55
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 080
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 090
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.43
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 011
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 082
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 135
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 077
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...