Полноценный ActionScript 3

eval("_root.holder.clip"+n)._alpha=50;

Полноценный ActionScript 3

Здесь функция eval определяет, что оценивает строка в круглых скобках во время выполнения и возвращает объект фрагмента ролика, поэтому эта единственная строка может заменить 20 (или 100, или 1000) строк повторяющихся код. Однако eval был удален из AS3. Многим пуристам это не нравится, хотя я никогда не слышал убедительных аргументов, объясняющих почему. К счастью, обходной путь здесь относительно прост:

это[“держатель”][“клип”+n]._alpha=50;

Этот код предполагает, что он выполняется в области _root, и работает, поскольку все фрагменты роликов хранятся во Flash в двумерном массиве.

Еще больше раздражает полное исключение глобальных переменных. Опять же, сам принцип глобальных переменных не одобряется приверженцами программной чистоты, и я согласен, что их нужно использовать экономно, поскольку они занимают память даже после того, как их больше нет. нужный. Однако предположим, что вы хотите сохранить имя пользователя, которое будет использоваться в различных местах вашего приложения. Что может быть проще и уместнее, чем _global.gUserName? Конечно, можно передавать локальные переменные, тщательно проектируя функции, но в реальном мире сроки всегда слишком короткие, и чем быстрее можно чего-то добиться, тем лучше.

Чтобы обойти эту проблему, добавьте в приложение AS3 функциональность глобальных переменных, создав специальный для этой цели и внутри этого класса создать переменную статического объекта, к которой затем можно добавить характеристики. Например, я могу объявить новый общедоступный класс, содержащий общедоступную переменную nGlobals, например:

общественный класс ночью

{

статическая общественная переменная nGlobals: Object = new Object();

}

Затем я могу получить доступ к его содержимому, используя синтаксис nlightn.nGlobals.gUserName, и написать строку типа:

nlightn.nGlobals["gUserName"] = "Джон Смит";

Мне это все еще кажется ненужной чепухой, и я не могу сказать, что с нетерпением жду процесса миграции. Я, вероятно, отложу это до тех пор, пока не завершу пару проектов во Flex 2, и к этому времени я буду гораздо лучше понимать детали AS3.

Гибкость в действии

Последние несколько месяцев я работал над продуктом под названием Virtual World for Collins, который вскоре будет доступен как в виде веб-приложения, так и на компакт-диске. Это образовательная программа, поддерживающая преподавание географии или любого другого предмета, в котором используются географические данные, состоящая из 3D-атласа, предоставленного Xamba (www.xamba.com), а также четыре дополнительных раздела, созданных NlightN, которые включают навыки картографирования, игры и данные о мире.

Я участвовал в разработке двух компонентов этого продукта: рандомизированной викторины и компонента мировых данных. В обоих случаях мы решили хранить данные в формате XML по двум причинам. Во-первых, XML позволяет нам структурировать данные в логическом формате по нашему выбору, а во-вторых, Flash имеет встроенную функцию Обработчик XML, который должен упростить нарезку данных, чем чтение в каком-либо специальном текстовом файле. формат. Одним из ключевых применений XML является хранение данных профиля страны, отсортированных по континентам, поэтому после выбора континента Появится раскрывающийся список названий стран, и при выборе страны таблица будет заполнена информацией об этой стране.

Обычно есть два способа добиться этого: косвенный подход заключается в чтении данных в многомерный массив, первое измерение которого представляет собой состояние страны. позиция в алфавитном списке, а второе измерение содержит разные элементы данных об этой стране – например, профили[2][1] могут содержать население Анголы фигура. Теоретически более простой способ — напрямую связать раскрывающийся список и таблицу с данными XML — подход, обычно используемый языки программирования, такие как Visual Basic или C#, но реализация привязки данных в Flash 8 настолько беспорядочна, что в итоге мы использовали метод массива.