среда, июня 18, 2008

Как получать сообщения от внедряемых/подгружаемых SWF. AS3

Например, есть у нас заставочка, которую мы подгружаем/внедряем в Flex-приложение.
Она долго проигрывается, и после ее завершения, мы хотим перейти, к примеру, на другой стейт. Но как поймать момент окончания заставки? А если нам надо как-то среагировать на ее команды в процессе воспроизведения? На ум приходит единственный вразумительный способ - генерировать события из заставки.
В простом случае, делается это всего одной строчкой:
this.dispatchEvent(new Event("Done"));
Но как, и кому подписываться на прослушивание этого события?
Да очень просто. В скрипте инициализации Flex-приложения вписываем:
this.addEventListener("Done", this.doneHandler, true);

Постараюсь пояснить происходящее:
При параметре useCapture, установленном в true, мы будем ловить наше событие на фазе захвата. На этой фазе, событие пройдет через всю цепочку дисплей-объектов, в которой сидит наш клип, до самого Stage.
Если мы не установим useCapture в true, то событие не будет обработано, т.к. событие, генерируемое из контейнера не имеет фазы target, а фаза bubbling отсутствует, т.к. мы генерируем событие с параметром по умолчанию bubbles=false.
Можно сделать наоборот - ловить событие на фазе bubbling. Тогда, при генерации события указываем bubbles=false, и получаем:
this.dispatchEvent(new Event("Done", true));
и
this.addEventListener("Done", this.doneHandler);

В процессе выяснений обстоятельств, я наткнулся на статейку: "Reader Question: Why isn’t event bubbling working" где хорошо разъясняется аналогичная ситуация.

Zinc 2.5 и Flex 3.0: Проблема со звуком

Имеется довольно крупный, офф-лайн проект - каталог недвижимости. Столкнулся со следующей проблемой:
Было необходимо вставить звуковое сопровождение. Нет проблем - создаем объект Sound, загружаем MP3-файл. Отлаживаем кнопку вкл/выкл звука. Всё работает как часы.
Загоняем всё это инковый гроб. Звука нет. Проверяем событие загрузки, трейсим загруженный объем звукового файла - всё отлично грузится и под zinc-ом. Но звука нет.
Тут уже начинает трясти, т.к. конец дня и домой хочется, а проект с утра сдавать.
И вот, пробую другой MP3-файл. Работает! А разница - первый был 5 Мб, второй - 680 Кб.
Итак, делаем вывод (предположительный) - Zinc (или система) ограничивает размер памяти выделяемой для нужд приложения. Причем как-то брутально - без предупреждений и исключений.

среда, июня 04, 2008

Flash CS3 + Flex Component Kit = Мистика

Вчера полдня потратили на решение такой проблемы:
В течение некоторого периода времени, разрабатывался набор Flex-компонентов с использованием Flash CS и Flex Component Kit 1.1.2 (это расширение идет в поставке Flex SDK 3. Кстати, лежит в папке ...Flex SDK/frameworks/flash-integration).
Всё было превосходно, мы отлаживали, обновляли их... до вчерашнего дня. Flash CS3 просто сломался.
Команда "Convert Symbol to Flex Component" отрабатывает успешно, SWC генерится, но всё это бесполезно.

Симптомы такие (касаются конечно только FLA-файла с компонентом):
  • Перестали работать тайм-лайновые скрипты ВООБЩЕ - в любом клипе.
  • Компоненты, которые получаются в результате публикации SWC Flex не видит.
  • Сначала символ компонента назывался "myButton". Позже, он был переименован с именем компонента "roomButton". Однако, иногда, имя символа (и класса) неожиданно опять слетает на старое без какой-либо закономерности.

Однако, при компиляции этого файла на другом компьютере, всё сразу чинится. И даже после пересохранения в какой-то момент починилось и на сломаном. Но не надолго.

Кроме того, FLA-файл был скопирован на удаленный компьютер. При открывании файла с удаленного компьютера и работе с этим всё работает корректно!

Не помогла даже переустановка Flash CS3!

Подробности: Компонент представляет собой клип с Base Class: mx.flash.UIMovieClip. В поле Class прописано имя класса, который управляет этим клипом и является потомком UIMovieClip.

понедельник, июня 02, 2008

AlternativaPlatform. Знакомство

Мы долго, с любопытством и восхищением, наблюдали за волшебством, которое творили наши Пермские коллеги. Они писали умные слова, которые мы привыкли встречать в описаниях 3D-ускорителей или настройках 3D-шутеров. Они выкладывали демки, которые не укладывалось в нашем 2D Flash-сознании и вызывали только один вопрос: "КАК?". Всё это казалось таким далеким, неосязаемым, недостижимым...

И вот, свершилось. Теперь можно просто зайти на сайт AlternativaPlatform, зарегистрироваться, скачать движок и просто пользоваться. Соблюдая, несомненно, лицензионное соглашение и правила этики.

Запомним это пророчество: "AlternativaPlatform.com — сеть уже не будет такой, как прежде ".

Итак, регистрируемся. Платформа делится на три части: Alternativa3d, AlternativaGUI, AlternativaCore. Пока доступен первый из них, его и качаем. Скачиваем архив и разархивируем его в предварительно созданную папку "Alternativa3D".

В обзоре Alternativa3d указывается, что на данный момент еще не все технические особенности внедрены. Самое вкусное оставленно на потом. Нам пока хватит и того что есть.

Идем в раздел документации. Но это сделать уже не так просто... 2 июня, к 11 часам сервер просто лежит. Еще 10 минут назад я спокойно обозревал сайт Альтернативы, но теперь, по всей видимости, придется прерваться. Интересно, это от наплыва посетителей или просто тех-проблемы?.. Не прошло и получаса, как сервер опять заработал и мы входим в раздел.

Здесь мы видим:

Уроки

1. Создаем во FlashDevelop новый "Default" проект, указываем в "Project > Properties... > Compiler Options > SWC Libraries":

  • Путь к файлам Alternativa3D/Alternativa3D.swc
  • Путь к файлам Alternativa3D/AlternativaTypes.swc
  • Путь к файлам Alternativa3D/AlternativaUtils.swc

2. Создаем файл HelloAlternativa3D.as, указываем ему "Always Compile" и копируем в него код примера.

3. Компилируем и запускаем. Всё работает без проблем, как и в примере на сайте. На первый взгляд всё просто. Побаловались с разными параметрами и почитали аннотации к коду. Примерно начинает складываться общая картинка. Любопытно было поэксперементировать с количеством сегментов куба. Первое желание - выставить их побольше и посмотреть, как это подвесит FP. Приятно удивило, что, к примеру, поставив их по 20 на каждое измерение, FP по началу явно подвис, но потом, видать, что-то сгенерилось и всё заработало достаточно быстро. Но 30 сегментов FP уже не стерпел...

По аналогии с первым смотрим два других урока. Писать тут особенно нечего - всё достаточно подробно изложено. Теперь от баловства надо переходить к делу. Только для начала нужно уточнить условия использования Alternativa3D в коммерческих целях.

В отличии от PaperVision3D, это не OpenSource, со всеми вытекающими последствиями. И значит открыт вопрос использования продуктов на базе альтернативы не в личных целях.

Ну вот, мы немножко пощупали (а сказать по честному, пока лишь едва ущипнули) этого мистического зверя, и хочется верить, что мы на нем еще ух как покатаемся!