воскресенье, февраля 17, 2008

3-я встреча RAFPUG. Рабочие будни

Сегодня забежал на пару часиков на третью встречу Российских Пользователей Адоби-Флэш-платформы.

Задержаться до конца не позволили обстоятельства, ибо, потратить личное время в выходные - слишком большая жертва для семейного человека, работающего пять дней в неделю 8 часов вне дома, а то и дома по вечерам (Эх, в будни бы проводили с утреца и хоть до самого вечера).

На этот раз всё было скромно. На входе девушки не раздавали именных бэйджиков, не было громких слов и именитых гостей. Да и гостей вобщем-то было не так много. Мне показалось, даже меньше чем на первой встрече.

Начал встречу, как всегда, Артемий, и анонсировал проект Adobe и иже с ним - портал Flashawards - несколько кривовато работающий (позже понял почему такое ощущение - объект флэш криво вставлен в HTML и в IE появляется злочастная рамочка), но вполне симпатичный, посвященный Первому профессиональному flash-конкурсу в России. Для начала, нашему вниманию был представлен призванный вдохновить всех флэшеров, забавный видео-ролик с зомбирующим образом быстро сменяющимися кадрами под чудесную музыку Save the Robots (Members Of Mayday), представляющий работы победителей предыдущего конкурса. Затем были вручены подарочки (обещаные на второй встрече) и Артемий обмолвился о скором выходе 3го FlexBuilder!

Цель моего сегодняшнего визита - послушать доклад Александра Козловского "Простой путь создания трёхмерного AIR приложения". Анонс был настолько завлекателен, что, казалось, только ради одного этого доклада стоило сорваться - анонсировалось и Papervision3D и создание AIR-приложения.

Я не буду обсуждать сам доклад - не имею такого права, т.к. сам не набрался сил и смелости что-либо вообще подготовить и докладывать.
В ходе доклада довольно подробно было продемонстрировано создание AIR-приложения и несколько поверхностно - использование Papervision3D.

Основные (лично для меня) моменты по созданию AIR приложения:
  1. Конфигурирование AIR-приложения. Все настройки хранятся в файле PROJECTNAME-app.xml. Важные для нас теги:
    filename - имя генерируемого файла.
    name - имя приложения (ВНИМАНИЕ - оно где-то в конце файла дублируется, что может вызвать недопонимание в процессе отладки).
    visible - будет ли видимым главное окно после старта.
    И другие - аналогично - пояснения есть для каждого в комментариях.
  2. Если нам нужно приложение в виде окна с тулбаром и тому подобными примочками, мы наследуем главный класс нашего приложения от mx.WindowedApplication. Если же нам всё это не нужно и мы хотим отсутствия всякого фона между нашей графикой и десктопом - просто от mx.Application.
  3. Создание tray-иконок для Windows и Apple платформ отличается. Если в Windows это место называется tray, то в Apple - это Dock. Соответственно, Александр предлагает нам проверять такие параметры как NativeApplication.supportsDockIcon и NativeApplication.supportsSystemTrayIcon. Затем, используя класс NativeMenu и иже с ним, мы создаем меню. ВАЖНО: Иконку лучше убирать принудительно, т.к. операционная система не всегда это делает самостоятельно. Для этого достаточно сделать NativeApplication.icon.bitmaps=[];.
  4. Для доступа к главному окну, используем SystemManager.Stage.NativeWindow.
  5. Для отлова Drag'n'Drop нам понадобятся события для ViewPort3D:
    NATIVE_DRAG_ENTER - вход мыши с драг'н'дроп-содержимым.
    NATIVE_DRAG_DROP - отпускание мыши с драг'н'дроп-содержимым.
    Кроме того, пользуется событие ADDED_TO_STAGE для инициализации.
  6. Важное замечание по Drag'n'Drop: используя объект события NativeDragEvent.Clipboard.getData(); можно получить переданное драг'н'дроп-содержимое. Дело в том, что при Drag'n'Drop-перетаскивании, данные складируются в буфере Clipboard, хотя, при этом данные, запомненные, к примеру, по Contrl+C не теряют своей актуальности.
  7. Сохранение файла:
    Stream=new FileStream();
    f=new File(File.applicationDirectory.nativePath+'...'); Где File.applicationDirectory.nativePath - текущая директория исполняемого приложения.
    Stream.open(f, FileMode.WRITE);
    Stream.WriteMultiByte("...data...");
    Stream.close();

По Papervision3D следующие заметки:

  1. Основные компоненты, которые необходимо создать и инициализировать: BasicRendererEngine - движок.
    Viewport3D - наследник Sprite для рендера изображения.
    Другие объекты - Scene3D, Camera (Camera.target - устанавливает объект, за которым будет наблюдать камера)

Другие заметки:

  1. Для прелоадера/сплэш-скрина используем объект-потомок ProgressBar. По окончании загрузки, диспатчим событие COMPLETE, после чего приложение Application получит событие PRELOADER_DONE.
  2. Для обновления приложения используем класс Updater. Класс выполняет лишь следующую функцию - сообщает AIR, что необходимо после закрытия приложения обновить его. Александр предложил самостоятельно скачивать и обновлять приложения с использованием библиотек ZIP-архивации.

Конечно, хотелось бы увидеть более подробное изложение, и, я думаю, если бы у Александра всё получилось так, как он планировал, так бы оно и было, но - обстоятельства выше нас. Несмотря на все трудности, доклад получился очень ценным и интересным.

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

В итоге, впечатление от встречи однозначно - Коллеги, хватит веселиться - настало время потрудиться. Наступили рабочие будни.

* * *

Исходники того, что демонстрировал Александр на RAFPUG-3 здесь. Про обновление AIR-приложения статья здесь (уже в "Чужой тетради").

Комментариев нет: