Дострочное пересдача экзамена
|
Создание и модификация объектов
Объекты как Контейнеры
Объекты ActionScript представляют собой, в первую очередь, контейнеры – хотя и специфические. Будучи таковыми, они не только содержат в себе нечто (например, данные или даже другие объекты – это называют свойствами объекта), они также могут выполнять специальные задачи (которые обычно зависят от их содержимого). Скажем, встроенный объект Flash String используется для хранения строкового значения – например, "Сильнее кошки зверя нет", – однако помимо этого он имеет методы, позволяющие выполнять различные манипуляции со своим содержимым; этот принцип мы продемонстрируем в следующем упражнении.
- Откройте Flash и выполните команду Файл > Новый (File > New), чтобы создать новый файл проекта. Откройте панель Действия, выделите кадр 1 и введите следующий скрипт:
person1 = new Object();
Эта строка создает новый экземпляр родового объекта с именем person1.
Примечание Объект Object (использованный здесь) не имеет специального применения – это родовой объект. Таким образом, в приведенной строке фигурирует экземпляр объекта Object (а не новый класс), который мы создали, чтобы продемонстрировать роль объекта как контейнера. В следующем уроке вы узнаете, что объект Object имеет более широкое применение.
На данный момент person1 – никакая не персона, вообще никто: мы не задали для нее никаких характеристик – ни пола, ни возраста, вообще ничего.
- Добавьте к предыдущей строке скрипта следующие:
person1.gender = "male"; trace (person1.gender); trace (person1.age);
Теперь объект person1 имеет свойство, под названием gender, со значением "male". Еще мы добавили пару действий trace, чтобы посмотреть, какие значения имеются в объекте person1. Давайте посмотрим, что у нас есть на данный момент.
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тестирование проекта.
Откроется окно Выход (Output), и в нем отобразится:
male undefined
Первое из действий trace вернуло значение "male", поскольку именно такое значение имеет person1.gender. Второе действие trace вернуло значение undefined для person1.age – это значение мы не присвоили, оно не определено.
Давайте добавим в person1 еще несколько свойств и значений.
- Закройте тестовый фильм и вернитесь в среду разработки. Выделите кадр 1. В панели Действия замените три строки скрипта, добавленные на шаге 2, следующими строками:
person1 = new Object(); person1.age = 16; person1.legs = 2; person1.name = "Justin";
Как видим, person1 приобретает все больше черт. Теперь она имеет все самое необходимое, чтобы войти в общество.
На данный момент любой скрипт может получить доступ к данным, связанным с person1 – мы продемонстрируем это на следующем шаге.
- В конец скрипта добавьте оператор if:
if (person1.age >= 21){ trace("Я иду на дискотеку"); }else{ trace("Я иду в МакДональдс"); }
Этот оператор проверяет значение person1.age, чтобы определить дальнейший образ действий.
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.
Откроется окно Выход (Output), и в нем отобразится:
Я иду в МакДональдс
Оператор if выдает именно такой результат, поскольку person1.age имеет значение 16.
Давайте добавим еще кое-что в наш объект person1 – продемонстрируем, что объект может содержать в себе другой объект. Эта концепция вам, в принципе, знакома – вспомните вложенные монтажные столы (это ведь не что иное, как объект MovieClip внутри другого объекта MovieClip ).
- Закройте тестовый фильм и вернитесь в среду разработки. Выделите кадр 1, в панели Действия замените оператор if, добавленный на предыдущем шаге, следующими строками скрипта:
person1.head = new Object(); person1.head.eyes = 2; person1.head.memories = new Array();
Итак, наша персона person1 получила (наконец-то!) голову – head. Это произошло в результате создания нового экземпляра объекта Object и помещения его внутрь объекта person1. Объекту head мы дали свойство eyes, имеющее значение 2. Мало того, внутрь объекта head мы поместили объект Array (c именем memories ).
Как видите, мы поместили один объект ( memories ) внутрь другого объекта ( head ), который, в свою очередь, находится в объекте person1. Мы могли бы поместить memories непосредственно в person1, вот так:
person1.memories = new Array();
Мы так не поступили, и на то были веские причины, о которых мы скоро расскажем.
Совет Можно поместить в person1.head существующий массив – с именем, скажем, myThoughts (а не создавать новый, как было показано), для этого следовало бы использовать такой синтаксис: person1.head.memories = myThoughts.
Что ж, давайте добавим несколько воспоминаний в массив memories.
- В конец скрипта добавьте следующие строки:
person1.head.memories[0] = "Я родился, пришел в этот мир."; person1.head.memories[1] = "Я узнал слово 'НЕТ'. Очень продуктивный день."; person1.head.memories[2] = "Я узнал, что если малость поору, то получу, что хочу.";
Эти три строки помещают данные в массив memories, находящийся внутри head объекта person1.
- В конец скрипта добавьте следующее действие:
trace(person1.head.memories[1]);
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.
Откроется окно Выход (Output), и в нем отобразится такая надпись:
Я узнал слово 'НЕТ'. Очень продуктивный день.
Это – значение, которое содержит person1.head.memories[1].
- Закройте тестовый фильм и сохраните свою работу как object1.fla.
Все, что мы запрограммировали, мы используем в следующем упражнении. Пока что запомните, что объекты – это контейнеры, способные хранить не только простые "порции" данных, но даже другие объекты. Смысл тут тот же, что при помещении переменной в экземпляр фильма-символа, или при создании на монтажном столе экземпляра Color, Sound или другого объекта (см. Урок 4 – "Объекты и их использование"). Вы помещаете объект (скажем, экземпляр объекта Color ) на монтажный стол (внутрь экземпляра объекта MovieClip ). Создавая на монтажном столе переменную, вы на самом-то деле даете новое свойство объекту MovieClip.