Руководство по actionscript. часть 3, стр. 004
Поскольку сейчас наше внимание сосредоточено на пространствах имен, мы рассмотрим только классы Items и KidsGame. В качестве упражнения рассмотрите оставшиеся классы самостоятельно.
Для начала посмотрим, как изменился класс Items со времени его предыдущего представления в листинге 17.1. Во-первых, мы добавили две новые переменные fruit: : apple и color: : purple, представляющие элементы. Благодаря новым переменным каждая категория элементов для фруктов и цветов теперь состоит из двух элементов: апельсина и яблока для фруктов и оранжевого и фиолетового для цветов. Мы также заменили простые описания элементов из листинга 17.1 (например, Round citrus fruit) экземплярами класса Item. Экземпляры класса Item хранят название элемента, URL-адрес изображения этого элемента и его идентификатор. Следующий код демонстрирует измененные переменные, представляющие элементы. Как и в листинге 17.1, каждая переменная уточняется пространством имен, соответствующим множеству, которому принадлежит данный элемент.
fruit var orange:Item = new Item(«Orange», «fruit-orange. jpg», 1); fruit var apple:Item = new ItemCApple». «fruit-apple. jpg». 2);
color var orange:Item = new Item(«Orange», «color-orange. jpg», 3); color var purple:Item = new ItemC’Purple». «color-purple. jpg», 4);
Кроме того, в класс I terns добавлены два массива, предназначенные для управления элементами в виде групп. Каждый массив содержит полный список элементов своей группы (либо фруктов, либо цветов). Массивы присваиваются переменным с одним и тем же именем (itemSet), но уточняемым различными пространствами имен (fruit и color).
fruit var itemSet:Array = [fruit::orange, fruit::apple]; color var itemSet:Array = [color: :orange, color: .-purple];
Чтобы предоставить доступ другим классам к различным наборам элементов в игре, в Items определено два метода с одним и тем же локальным именем getltems ( ), которое уточняется различными пространствами имен fruit и color. Каждый метод get I terns ( ) возвращает копию набора элементов, соответствующего пространству имен данного метода. Таким образом, обратиться к подходящему набору элементов можно динамически, в зависимости от текущего типа вопроса (либо цвет, либо фрукт).
fruit function getltems ( ):Array { // Возвращает фрукты, return fruit::itemSet. siice(O):
}
color function getltems ( ):Array { // Возвращает цвета, return color::itemSet. slice(0);
}
Наконец, в классе Items определены переменная itemTypes и соответствующий метод-аксессор get ItemTypes ( ). Переменная itemTypes хранит список всех различных множеств элементов в игре. В нашей игре определено только два множества: фрукты и цвета, но в дальнейшем можно будет легко добавить новые множества. Каждое множество элементов соответствует пространству имен, поэтому переменная itemTypes представляет собой массив пространств имен. Метод get ItemTypes ( ) возвращает копию этого массива, предоставляя внешнему коду возможность централизованно получать официальный список типов элементов в игре.
// Переменная itemTypes
private var itemTypes.-Array = [color, fruit]:
// Метод getItemTypes( ) public function getltemTypes ( ):Array { return itemTypes. siice(O);
}
Это все, что касается изменений в классе Items. Теперь рассмотрим новый основной класс приложения KidsGame. В отличие от Items, класс KidsGame никогда не
использует идентификаторы пространств имен fruit и color напрямую. Вместо этого он обращается к указанным пространствам имен через метод экземпляра
getltemTypes ( ) класса Items.