Archive for May, 2007
FontLoader
Класс FontLoader позволяет вам загружать любой (любой — это действительно ЛЮБОЙ) swf-ролик версии 3 и выше, так или иначе содержащий embedded-шрифты, для их дальнейшего использования ![]()
Класс позволяет использовать также шрифты статических полей (такие шрифты не содержат разметки и каждый символ такого шрифта в текстовом поле будет иметь некорректную позицию). Такие шрифты можно использовать, например, когда вам нужен один конкретный символ данного шрифта (значок, картинка и т.п.). Класс готов к употреблению как есть, наследоваться от него нельзя.
UPD: FontLoader 1.x устарел. Новый FontLoader 2.0.
14 commentsРефакторинг WAV Player
Немного изменил структуру классов, спрятал класс SWFFormat, поправил WaveGraph.
Кто не знает, о чем речь.
GlobalMouse
Во времена AS2 мышиные события типа onMouseUp, onMouseDown, onMouseWheel, onMouseMove были глобальными, с приходом AS3 эти события теперь жестко привязаны к InteractiveObject. Не желая с этим мириться, я написал класс GlobalMouse, позволяющий любому объекту получать данные события, а также захватывать скролл мыши от браузера (если скролл мыши не захвачен, а так и происходит в AS3, то можно столкнуться с такой ситуацией, что при прокручивании ComboBox прокручивается ещё и вся страница с флешкой).
.
UPDATE: Причесанный класс только для захвата мыши.
15 commentsНеудачный апгрейд WP
Случайно удалил скриншоты обзора CS3 и ещё часть некоторых файлов. Завтра, надеюсь, будут восстановлены хостером. Если не восстановят, сделаю новые.
UPD: Восстановили.
No commentsЭкспорт классов во второй кадр и создание прелоадера во Flash CS3
Итак, в AS2 общая схема создания ролика all-in-one (с прелоадером) такова:
1) Все экспортируемые элементы не экспортируются в первый кадр (галочка Export in first frame снята);
2) Создается пустой мувик, содержащий два кадра. В первом только stop(); и больше ничего нет. Во втором кадре данного мувика размещаются все экспортируемые элементы (звуки, шрифты, мувиклипы). stop в первом кадре не позволяет данному мувику переходить на свой второй кадр, таким образом мы избегаем ненужной инициализации элементов, находящихся во втором кадре;
3) Данный мувик размещается во втором кадре проекта в любом месте сцены (все равно он в принципе невидим, т.к. в его первом кадре ничего нет);
4) В настроках AS2 проекта выставляется второй кадр для экспортирования классов;
5) В третьем (можно и во втором) кадре проекта можно пользоваться всеми классами и ресурсами.
Таким образом, первый кадр освобожден от различных ресурсов и мы можем написать там обычный AS1-код (увы, чистого AS2 в таком варианте добиться вы получиться) прелоадера.
Однако, применяя такую схему для AS3, вы можете столкнуться с тем, что клипы, у которых есть содержимое, создаются, но это содержимое отсутствует. Такая проблема возникает для различных спрайтов, мувиклипов, которые содержат, например, шейпы, нарисованные вручную в IDE. В случае же обычных классов, не являющихся визуальными (или происходит программная отрисовка) такой проблемы нет. Проблема, судя по всему, связана с тем, что компилятор, когда встречает обращение к подобным клипам до кадра экспорта (в данном случае — второго), переносит код такого класса в первый кадр, а вот его содержимое (шейпы, например) — «забывает».
Что нам нужно для того, чтобы решить данную проблему?
Отказаться от обращений к пользовательским классам в Document class.
Как?
Использовать метод loaderInfo.applicationDomain.getDefinition для создания экземпляра класса, который будет являться входной точкой нашего приложения. А уже в этом классе мы можем создавать все, что душе угодно. Но при этом нам нужно добиться, чтобы класс, являющийся входной точкой нашего приложения был экспортирован во второй кадр.
А как этого можно добиться, если мы не делаем прямых обращений к пользовательским классам в Document class?
Заставить компилятор экспортировать наш входной класс также просто: необходимо создать пустой мувиклип, с прописанным у него входным классом и поместить этот клип в тот самый двухкадровый мувиклип-экспортер, содержащий и все остальные ресурсы. Таким образом, компилятор создаст два объявления AS3-классов в нашем ролике. В первом объявлении будет содержаться только Document class (вы можете, конечно, создать какие-либо невизуальные классы, либо классы-спрайты, занимающиеся программной отрисовкой чего-либо, но таким образом вы основательно можете увеличить вес первого кадра), во втором (которое располагается во втором кадре) — все остальные классы, в т.ч. класс, являющийся входной точкой.
Представляю вашему вниманию простейший пример создания ролика в CS3 с экспортом классов во втором кадре и загрузчиком.
Некоторые пояснения к примеру:
Классы Box и Star — нарисованные вручную клипы.
Класс Program есть по сути Document class, он же входная точка.
Класс AnotherClass просто иллюстрирует работу экспорта во второй кадр всех нужных классов (не только физически размещенных во втором кадре).
Класс EmbedClip является сервисным классом-экспортером, во втором кадре которого мы будем размещать все наши нарисованные клипы. В этот кадр данный класс никогда не переходит, во избежание лишних инициализаций классов. Экземпляр данного класса находится во втором кадре нашего ролика.
Ну а ExportSecondFrameExample есть настоящий Document class, по совместительству выполняющий функцию загрузчика.
41 commentsИсходники WAV Player-а
Как и было обещано, исходники WAV Player-а. Старался сделать WAVSound наименее отличающимся от обычного Sound. В будущем, возможно, будет возможность потоковой загрузки.
Пожелания, bug-репорты — welcome!
WAV Player
Написал Flash плеер, воспроизводящий обычные PCM wav-файлы и строящий график амплитуд.
Позднее причешу код и выложу исходники.
UPD: Исходники.
29 comments