вторник, декабря 25, 2007

От AS3 к AS2. Впечатления.

Вышеупомянутый проект в срочном порядке пришлось переносить на AS2 - благо он не сложный и это заняло 2-3 часа.
В итоге интересные замечания:


  1. Сортировка массива методом sortOn(): не проходит сортировка по полям-возвращателям get.
  2. Работа с классом Tween не изменилась кроме обработки событий.
  3. При работе с классом EventDispatcher возникла любопытная путаница. В AS3 в addEventListener вторым параметром идет метод обработчика, а в AS2 - объект, который содержит метод с именем события. Так вот, если оставить имя метода во втором параметре, именно этот метод и вызовется. Но область видимости будет принадлежать объекту, пославшему событие.
  4. Готовность классов клипов: в AS3, из конструктора класса (к примеру MovieClip) сразу полностью доступны все содержащиеся в нем клипы. В AS2 же, из конструктора не доступны свойства классов (с которыми ассоциированы клипы) внутрилежащих клипов, и доступ к ним будет возможен только на этапе события onLoad.

В остальном - простая замена классов, переработка событийной модели и т.п. Производительность незначительно упала.

Кроме того. Возникли странные проблемы с закэшированными в таймлайне клипами. Если клип с cacheAsBitmap=true менялся внешне (rotation,tint и т.п.):

  • При AS3 с компиляцией под FP9 всё Ок.
  • При AS2 с компиляцией под FP8, всё Ок.
  • При AS2 с компиляцией под FP9 с ним просто ничего не происходит.

понедельник, декабря 24, 2007

Flash 9 & Zinc. Интенсивная векторная анимация. Обвально съедаются рессурсы производительности

Задача - screensaver. Небольшой флэш-ролик (Flash 9, AS3) с довольно интенсивной векторной анимацией внедряется в Zinc-проектор. По истечении некоторого времени процессор забивается полностью и клип воспроизводится как "слайд-шоу".
Подозрение на то, что внедряется какой-то левый Flash Player 9 ActiveX, т.к. при проигрывании в обычном флэш-плеере или флэш-проекторе такой проблемы н возникает.

* * *

Вышеописанная проблема повторилась и при сборке Zinc-проекта на других компьютерах.
Используемая версия - Zinc 2.5.23. Она же и объявлена виновником.

* * *

При сборке в более свежей версии Zinc проблема пропала, но появилась новая - собственно купить эту свежую версию. Однако, времени на выбивание денег и другие бюрократические процедуры уже не было, и решили, что быстрее всё перевести в AS2, под которым всё работает как часы и поныне.

среда, декабря 19, 2007

Игровой сервер SmartFoxServer. Обзор, установка под Windows и тестирование

Стоит задача разработки небольшой он-лайн игры. Поступило предложение использовать в качестве серверной части SmartFoxServer. Для начала, хочу убедиться в правильности выбора моего коллеги и покопать в этом огороде. Пока не глубоко.

Смотрим ссылки:
http://www.smartfoxserver.com/ - главный сайт продукта.
http://www.gotoandplay.it/ - сайт производителя, также посвященный разработке веб-игр, и, на сколько я понял, продвигающий вышеупомянутый продукт.

Говорят, что это мощная платформа для быстрой разработки ("быстрой" - это основная тема) многопользовательских приложений и игр на Macromedia Flash MX, MX 2004, 8, Flex 2 and Flash CS3.
5 доводов за использование SmartFoxServer:


  1. Много крупных проектов известных компаний используют на эту платформу: Showcase.
  2. Умеренные цены. Продукт разбит по функциональности на 3 категории, а ценовая политика каждой категории основана на количестве пользователей (подключений).
    BASIC Edition - от 200 до 800 евро.
    PRO Edition - от 500 до 2000 евро.
    Версию Lite можно даже не рассматривать.
  3. Высокие производительность и надежность: Benchmarks.
  4. Мощная поддержка продукта: хорошо подготовленная документация и форум (другой форум).
  5. Говорят что обожают свой продукт и игры, а также обещают светлое будущее для всех разработчиков веб-игр, которые сядут на их платформу.

Кроме того:

  • Есть библиотека компонентов для работы с сервером.
  • Содержит мощный веб-сервер, может работать без помощи других серверных приложений.
  • Может устанавливаться на все основные ОС: Windows (NT/2K/XP/2003), Linux, MacOS X (10.3 or higher), Solaris и т.д.
Все гладко и красиво. А что же говорит наш брат флеш/веб-девелопер про этот продукт? Пороемся-ка на Flasherе - место, куда я всегда лезу если надо что-нибудь поискать - море информации, в остальном тут делать нечего. Отфильтровав ворчание __etc и дебаты не по теме, видим примерно следующее:


  • Забаненый Antares: "SmartFox Server используют профессиональные производители игр, авторы gotoandplay.it"
  • Miramax: С SmartFox без знания JAVA тебе и версия PRO не поможет.
  • Flskif: "В PRO версии есть такая вещь, как Server Side Extensions, которые, ВНИМАНИЕ, можно писать на AS !http://www.smartfoxserver.com/docs/ -> SmartFoxServerPRO -> Introduction to extentions"
Порыл другие источники. В итоге, резко отрицательных мнений не встретил. В общем, народ либо пользовал эту платформу, либо с ней знаком. Кому-то кажется дорогим удовольствием, кто-то пользует свои наработки.
С деньгами проблем у нас нет, поэтому продолжаем смотреть в сторону этого коммерческого проекта.
Кроме того, существует несколько альтернативных решений, включая опенсорсные, но игровая специфика присутствует не во многих. SmartFoxServer все-таки позиционируется именно как игровой сервер.

Теперь попробуем скачать и установить SmartFoxServer.
Выберем PRO-версию и скачаем версию для Windows. Устанавливаем. Ничего сверхсложного.
Запускаем "Start SmartFoxServer". Появляется консоль, что-то начинает устанавливаться, запускаться. В итоге имеем надпись "Server is up and running!"

Теперь попробуем это в действии. Лезем в "Examples".
Интересовать нас будет папочка AS3. SWF понятное дело заработали не все - вылезло окно исключения - локальная политика безопасности не дала пользовать сокеты, загружать локальные XML и т.п.
Попробуем открыть и откомпилировать исходник из Flash IDE.
Попробуем пример "advancedBuddList". Перед компиляцией надо установить пути к классам. Вносим в список Publish Settings > Flash > Settings > Classpath строку "C:\Program Files\SmartFoxServerPRO_1.6.0\Flash API\Actionscript 3.0".
Успешно компилируем, запускаем. Работает, коннектится, но как-то криво.
Зато пример "SmartFoxChat" работает превосходно. А в окне серверной консоли мониторится всё происходящее.

Кстати, под IE локальная документация работает криво. Прийдется пользоваться он-лайновой версией: User Documentation и SmartFoxServer API for Actionscript 3.
API для AS3 представляет собой два пакета по два класса:
  • it.gotoandplay.smartfoxserver.SmartFoxClient - основной класс, отвечает за соединение с сервером и обработку событий.
  • it.gotoandplay.smartfoxserver.SFSEvent - представляет все события, обрабатываемые классом SmartFoxClient.
  • it.gotoandplay.smartfoxserver.data.Room - хранит свойства каждой из Server Room (комната, что-то вроде отдельного сеанса работы нескольких подключенных пользователей).
  • it.gotoandplay.smartfoxserver.data.User - хранит свойства пользователя.

На первый взгляд всё понятно и не сложно. Разберемся.

Для поверхностного знакомства достаточно. Теперь дело за изучением API и можно внедрять в игровой проект.

воскресенье, декабря 16, 2007

Первое собрание Russian Adobe Flash Platform User Group. Взгляд зрителя

Сегодня удалось поприсутствовать на первом собрании Russian Adobe Flash Platform User Group.
Честно говоря, это первое мероприятие, посвященное флэш-технологиям, на котором я присутствовал когда-либо.
Впечатления противоречивы, но, думаю, отрицательные эмоции - лишь результат депрессивного состояния от накопившихся неблагоприятных обстоятельств, преследующих меня последнее время.

Я чуть опоздал на первый доклад ("Flex + Flash = ") и пропустил имя докладчика - представителя Adobe (* Артемий Малков *). Давались основы Flex-разработки на Flex Builder 2. Очень ценный доклад лично для меня - я еще не имею практики работы с визуальным редактором Flex и MXML. Легкая и наглядная подача: на примерах, которые кодились прямо на глазах у слушателей. Доклад рассчитан на широкую аудиторию, в основном, для начинающих.

Второй доклад ("Работа с событиями в ActionScript 3 и Flex") для тех, кто уже попробовал себя в разработке Flex-приложений на AS3. Костя Constantiner снизошел к нам из Питера и довольно доходчиво, но всё же несколько сжато рассказал про события в AS3 и Flex и их особенности.

Обещали обнародовать все материалы докладов, и я с нетерпением жду, чтобы их покопать поподробнее.

На второй части конференции обсуждались насущные проблемы компании Adobe, а именно - что Adobe нужно сделать, чтобы привлечь как можно больше разработчиков и пользователей к Flash-платформе ... и при этом как можно меньше потратиться... (по настроению ведущего представителя Adobe сложилось такое впечатление).

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

Приятно было увидеть в живую тех, кто до сего момента существовал лишь как абстрактный образ в моем воображении. Забавно также, что на фото в блогах и форумах все выглядят симпатичнее чем в жизни...

* * *

Фото и видео со встречи:
Блог flashimp,
Результаты первой встречи User Group

пятница, декабря 07, 2007

Классификация переменных среды

%SYSTEMDRIVE% - Возвращает имя диска, содержащего корневой каталог операционной системы Windows XP/2003 (т. е. системный корневой каталог).

%SYSTEMROOT%, %WINDIR% - Возвращает размещение корневого каталога операционной системы Windows XP/2003

%PATH% - Указывает путь поиска для исполняемых файлов.

%PROGRAMFILES% - Указывает путь к каталогу установки программ (Program Files)

%COMMONPROGRAMFILES% - Указывает путь к общему каталогу программ (Program Files\Common Files).

%TEMP% и %TMP% - Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.

%USERPROFILE% - Возвращает размещение профиля для текущего пользователя.

%ALLUSERSPROFILE% - Возвращает размещение профиля "All Users".

%CD% - Возвращает путь к текущей папке.

%APPDATA% - Возвращает используемое по умолчанию размещение данных приложений.

Использование необъявленных классов. Zinc. AS2

Работая с Zinc столкнулся с проблемой:
Создал класс, в котором используются классы Zinc типа mdm.PDF7, mdm.Application, и т.п.
Компилятор ни в какую не пропускал необъявленные классы.
Как только я добавил к объявлению класса dynamic class, все вопросы у компилятора отпали.
Значит mdm расценивается как переменная, и для стандартного класса появление нового свойства вызывает ошибку компиляции.
Однако, когда я определил переменную mdm для стандартного класса, ошибка пропала, но вот код Zincа уже перестал работать.

Грабли с инициализацией вложенных клипов. AS2

Столкнулся со следующей фичей:
Есть главный класс, ассоциированный с Movieclip.
В нем есть другой MovieClip, с которым тоже ассоциированн некий класс.
В главном классе он объявлен как свойство.
Так вот, в конструкторе главного класса никакие свойства вложенного класса недоступны. Доступны свойства MovieClip. Но новые свойства/методы все undefined.
Следовательно вывод - ассоциация классов и MovieClip-ов происходит в нисходящем направлении от верхних классов к классам более глубоко вложенным.

Выход - для инициализации использовать событие главного класса onLoad.

среда, декабря 05, 2007

Не работает скрипт в TimeLine. AS3

Странно, но у меня не получилось использовать скрипты (а именно вызов stop();) в таймлайне клипа.
Клип управляется также из внешнего скрипта. Внешний скрипт осуществляет gotoAndPlay на метку, и по прошествии нескольких фреймов, срабатывает фрейм со скриптом stop();
Скрипт не отрабатывает.
Надо искать решение...