User's collector

Внимание!   Данная опция будет доступна только после того, как вы авторизуетесь.
   запомнить меня 

Многие знают, что, за исключением Flex Chartings (платных компонентов для построения графиков), Adobe Flex SDK распространяется в виде открытых исходных кодов. Это означает, что вы всегда можете:

  • посмотреть логику работы того или иного компонента;
  • исправить найденную в SDK ошибку;
  • послать разработчикам патч, исправляющий эту ошибку;
  • самостоятельно скомпилировать из исходников рабочую версию SDK.

Доступ к исходникам Flex SDK предоставляется посредством системы контроля версий SVN, и вы всегда можете загрузить их, обратившись к trunk-у по следующему URL-адресу.

Вы спросите: «Для чего мне это нужно, если можно скачать одну из уже скомпилированных сборок Flex 4 SDK с сайта Adobe, и не придется проделывать никаких дополнительных манипуляций?». Самостоятельная сборка SDK на основе рабочей копии, полученной из системы контроля версий, обладает следующими преимуществами:

  • сюда относится весь предыдущий список возможностей;
  • на вашем компьютере всегда будет самая свежая сборка Flex 4 SDK;
  • для этого вам не нужно будет каждый раз заново скачивать весь архив со сборкой — достаточно будет только обновить измененные разработчиками исходные файлы и перекомпилировать SDK. Это особенно критично, если вдруг вы окажетесь в таком месте, где в наличии есть только медленное и нестабильное соединение с сетью;
  • вы сможете отслеживать и быть в курсе того, над какими элементами трудились в последнее время разработчики Flex 4 SDK.

Однако не нужно забывать о том, что в trunk-е может оказаться нерабочая версия SDK. В этом случае вам нужно будет откатиться на одну из предыдущих ревизий. Немного позже я объясню, как это сделать. Для начала наладим весь процесс сборки. Т.к. я все еще являюсь замшелым «виндузятником» и никак не могу пересесть на другую операционную систему, то весь описываемый процесс будет ориентирован на пользователей Windows. Думаю, пользователи других операционных систем смогут по аналогии с этой статьей настроить сборку на своих компьютерах.

Первым делом нам нужен хороший SVN-клиент, который позволит загрузить исходники из хранилища. Если у вас уже установлена подобная программа, вы можете пропустить этот шаг. Я уже достаточно давно в качестве подобного клиента под Windows использую TortoiseSVN, который встраивается в оболочку операционной системы и позволяет работать с файлами и папками в Проводнике при помощи контекстного меню, появляющегося по щелчку правой кнопкой мыши. Скачиваем и устанавливаем программу. Обратите внимание, что на странице загрузки программы есть множество языковых пакетов (в том числе и русский), позволяющих локализовать язык интерфейса программы. Далее перезагружаем ОС.

Создаем папку, в которой будет располагаться Flex 4 SDK. Я рекомендую создать ее в корне логического диска или файловой системы, а из названия папки исключить пробелы. Например, создать папку c:/flex_sdk_4. Это обусловлено тем, что в таком случае будет удобнее работать с SDK через командную строку.

Щелкаем правой клавишей мыши по папке и в контекстном меню выбираем пункт TortoiseSVNSVN Checkout… (SVN Извлечь…). В появившемся диалоговом окне указываем адрес до папки trunk Flex 4 SDK, глубину охвата при извлечении указываем Fully recursive (Полностью, рекурсивно) и выбираем пункт HEAD revision (HEAD-ревизия) для извлечения. Нажимаем кнопку OK и идем пить кофе, пока будут извлекаться исходные коды Flex SDK.

Теперь нам необходимо установить и настроить Apache Ant (страничка на Википедии) — очень полезный инструмент, позволяющий разработчикам автоматизировать различные процессы во время сборки и тестирования своих приложений. В свою очередь, разработчики Adobe Flex SDK автоматизировали процесс сборки Flex 4 SDK при помощи этого инструмента. Загружаем архив с программой и распаковываем его содержимое в папку C:\Program Files\Ant\. Теперь прописываем путь к папке bin в переменную среды Path. Для этого щелкаем правой клавишей по иконке Мой компьютер и в появившемся меню выбираем пункт Свойства. Переходим на вкладку Дополнительно и нажимаем кнопку Переменные среды. В списке Системные переменные так же через точку с запятой добавляем путь C:\Program Files\Ant\bin к переменной Path. Нажимаем, где нужно, кнопки Применить и OK. Перезагружаем Windows.

Компиляторы Flex SDK представляют собой программы, которые компилируются и работают в среде Java. Поэтому нам нужно установить на свой компьютер JDK. Для этого идем на сайт компании Sun и скачиваем последнюю версию Java SE Development Kit. На момент написания статьи такой версией была JDK SE 6.12. После окончания загрузки устанавливаем среду. Во время всей процедуры инсталляции можно руководствоваться действиями мастера установки по умолчанию. После завершения установки, снова открываем окно редактирования переменных среды и добавляем переменную JAVA_HOME в список системных переменных, а ее значением устанавливаем строку с путем к папке JDK: C:\Program Files\Java\jdk1.6.0_12.

Остался последний этап подготовки системы к компиляции Flex 4 SDK. Дело в том, что во время сборки Flex 4 SDK производится выполнение нескольких UNIX-овых shell-скриптов, которые, естественно, не будут работать под Windows, однако без проблем выполнятся под Mac OS и Linux. Но этот пункт тоже решаем. В корневой папке Flex 4 SDK находится файл README.txt, который содержит строку «This version of Flex is officially built in Cygwin on Windows XP Pro SP2». Т.е. разработчики в Adobe так же собирают SDK под Windows, единственной тонкостью является наличие в системе установленного Cygwin (страничка на Википедии) — эмулятора командной строки UNIX. Устанавливаем Cygwin, воспользовавшись для этой цели специальным загрузчиком и инсталлятором. Для установки указываем папку, находящуюся в корне логического диска. Путь к этой папке не должен содержать пробелов. Можно воспользоваться путем, предлагаемым по умолчанию: C:\cygwin\.

После установки запускаем консоль Cygwin, переходим в папку с исходными кодами Flex 4 SDK и запускаем сборку при помощи Apache Ant:

CODE:
  1. Yuriy@Yuriy-laptop ~
  2. $ cd /cygdrive/c/flex_sdk_4/
  3.  
  4. Yuriy@Yuriy-laptop /cygdrive/c/flex_sdk_4
  5. $ ant

Осталось дождаться окончания билда и собранная своими руками копия Flex 4 SDK готова к работе!

Чтобы синхронизировать свою рабочую копию Flex 4 SDK с теми изменениями, которые внесли в trunk разработчики, необходимо выбрать пункт SVN Update (Обновить) в контекстном меню папки с рабочей копией, дождаться завершения процесса обновления и пересобрать проект. Таким образом вы всегда будете иметь на своем компьютере самую свежую версию Flex 4 SDK.

Теперь пару слов о том, что нужно делать, если вдруг вы обновились до нестабильной ревизии в хранилище Flex 4 SDK. Щелкаем правой клавишей по папке с локальной рабочей копией Flex 4 SDK и в контекстном меню выбираем пункт TortoiseSVNUpdate to revision… (Обновить до ревизии…), в появившемся окне переключитесь на пункт Revision (Ревизия), введите номер одной из предыдущих стабильных ревизий в текстовое поле и нажмите кнопку OK. После завершения обновления пересоберите Flex 4 SDK.

На этом статья закончена. Желаю вам удачных экспериментов с новой версией Flex SDK!

22 комментария

Теги:

Те из вас, кто собирает свои as3 приложения с помощью mxmlc знакомы с метатэгом [Embed], который используется для внедрения внешних ресурсов в конечный swf. Среди поддерживаемых mxmlc типов внедряемых ресурсов присутствуют файлы изображения (JPG, JPEG, PNG и SVG), swf файлы, символы из swf файлов, mp3 файлы, файлы системных и TrueType шрифтов. Но не все знают, что с помощью [Embed] можно внедрить любой файл в виде байтовой последовательности.
Как вы знаете включение ресурсов возможно как на уровне свойства так и на уровне класса. Это справедливо и для файлов, которые мы включаем в виде байтовой последовательности. В примере ниже мы включаем в наш клип текстовый файл на уровне свойства (обратите внимание на дополнительный параметр mimeType, именно он сообщает mxmlc, что мы хотим включить файл как байтовую последовательность):

Actionscript:
  1. [Embed(source="readme.txt", mimeType="application/octet-stream")]
  2. public var Readme:Class;

Если вы хотите включить свой файл на уровне класса то вы должны будете наследоваться от mx.core.ByteArrayAsset:

Actionscript:
  1. package
  2. {
  3.     import mx.core.ByteArrayAsset;
  4.    
  5.     [Embed(source="readme.txt", mimeType="application/octet-stream")]
  6.     public class Readme extends ByteArrayAsset {}
  7. }

После этого, чтобы создать экземепляр класса нашего включенного файла просто вызываем конструктор:

Actionscript:
  1. var readme:ByteArrayAsset = new Readme(); // для уровня свойства
  2. var readme:Readme = new Readme(); // для уровня класса

Так как в любом случае наш ресурс является наследником или экземпляром ByteArrayAsset, который в свою очередь расширяет ByteArray, то мы можем использовать все методы последнего. Например, прочитать содержимое текстового файла из нашего примера можно так:

Actionscript:
  1. var readmeContent:String = readme.readUTFBytes(readme.length);

В бинарном виде вы можете включать и файлы поддерживаемых типов. Например, вы можете включить другой swf в виде последовательности байтов, после чего можно внести swf в список видимых объектов или получить доступ к его внутренним ресурсам, предварительно использовав Loader:

Actionscript:
  1. package
  2. {
  3.     import flash.display.Loader;
  4.     import flash.display.Sprite;
  5.     import flash.events.Event;
  6.    
  7.     public class EmbedResourceExample extends Sprite
  8.     {
  9.         [Embed(source="assets/resources.swf", mimeType="application/octet-stream")]
  10.         private var Resources:Class;
  11.        
  12.         public function EmbedResourceExample ()
  13.         {
  14.             var loader:Loader = new Loader();
  15.             // Подписываемся на событие INIT, после которого
  16.             // мы получим доступ к классам внутри включенного swf
  17.             loader.contentLoaderInfo.addEventListener(Event.INIT, resourceInitHandler);
  18.             // Загружаем swf как байтовую последовательность
  19.             loader.loadBytes(new Resources());
  20.         }
  21.        
  22.         private function resourceInitHandler (e:Event):void
  23.         {
  24.             // Извлекаем и создаем экземпляр класса из включенного swf
  25.             var SomeClass:Class = e.target.content.loaderInfo.applicationDomain.getDefinition("SomeClass") as Class;
  26.             var someClass:Object = new SomeClass();
  27.         }
  28.     }
  29. }

Пожалуй на этом все.
Напоследок хочу отметить, что метатэг [Embed] не распознается flash compiler и включить тот же текстовый файл в swf силами Flash IDE не получится.
Удачи!

7 комментариев

Теги:

На прошлой неделе завершил работу над своим первым небольшим коммерческим приложением, работающим в среде AIR (Apollo). Теперь буду с гордостью считать, что являюсь одним из первых российских девелоперов, начавших работать с этой платформой на коммерческой основе. =)

Работа приложения заключается в том, чтобы при помощи манипуляций пользователя на выходе получить определенным образом структурированный XML файл, который будет являться конфигурационным файлом уже для другого приложения. Т.е. по сути, мое приложение является своеобразным конфигуратором для другого приложения. Так что довелось поработать с файловой системой и немного с Window API. Но суть не в этом, а в том, что после создания приложения встал вопрос о том, как оно будет распространяться. Вынуждать конечного пользователя (наверняка далекого от компьютерных технологий) самостоятельно устанавливать среду исполнения AIR (Apollo), а затем и .air файл с приложением, как-то не хотелось, поэтому было решено упаковать приложение и среду исполнения в единый инсталляционный файл.

После непродолжительного поиска в Гугле и чтения тематических сайтов была найдена программа «Inno Setup Compiler», распространяющаяся свободно, т.е. кроме того, что вы можете бесплатно ее использовать, доступны еще и исходные коды программы на Delphi. На сайте разработчиков написано, что программа по возможностям и стабильности не уступает многим коммерческим инсталляторам. Что ж, охотно верим. По крайней мере, для наших целей ее возможностей будет более чем достаточно.

«Inno Setup Compiler» относится к классу программ, имеющих в своем распоряжении мастер, помогающий установить начальные характеристики инсталлятора, и редактор кода, при помощи которого можно отредактировать другие опции программы установки. Давайте сразу определимся, каким мы хотим видеть процесс установки нашего приложения:

  1. После принятия пользователем лицензионных соглашений заблокировать интерфейс мастера установки.
  2. Распаковываются установочные файлы AIR (Apollo) и нашего приложения. Тут необходимо решить вопрос с директорией, в которую будут распакованы файлы. Я решил в качестве целевой папки использовать директорию, в которой будет находиться инсталлятор (хотя это совершенно не годится, если инсталлятор будет растространяться на компакт-дисках).
  3. Устанавливается среда AIR.
  4. Устанавливается наше AIR приложение.
  5. Завершение установки. Снимается блокировка с окна мастера установки. Показывается единственная кнопка «Готово».

Еще нужно отметить, что совершенно не нужно, чтобы наша программа установки была прописана в реестре в качестве установленной на компьютере программы. Хоть «Inno Setup Compiler» и позволяет без труда организовать это, но это будет лишним, поскольку после установки деинсталлировать будет нечего — все распакованные файлы, возможно, будут еще нужны пользователю для произведения каких-либо манипуляций с ними «вручную».

И так, приступим. Для начала создадим новый файл описывающий процесс установки: FileNew. Автоматически должен запуститься мастер создания файла установки. На втором экране мастера мы можем указать:

  • название приложения;
  • название приложения, включающее версию приложения;
  • компанию-создателя приложения;
  • сайт поддержки приложения.

На третьем экране мастера нужно указать папку установки программы. Т.к. наша программа не нуждается в оной, ставим галочку на пункте The application doesn’t need a folder. На четвертом экране мастера нам нужно прописать файлы, которые будут включены в инсталлятор. Поэтому при помощи кнопок Browse, указываем пути до файла установки Apollo Runtime и до файла нашего приложения. После этого нужно указать папку, в которую будет распакован каждый из этих файлов. Поэтому поочередно выделяем каждый файл, жмем на кнопку Edit и в выпадающем списке Destination base folder меняем значение на Setup source directory. На пятом экране мастера можно указать пути до файла лицензии, и до информационных файлов, которые будут показаны до и после процесса установки. На шестом экране мастера можно выбрать языки, на которых будет осуществляться процесс установки. Я указал английский и русский. На седьмом экране нужно указать папку, в которую будет помещен скомпилированный файл установки, название файла установки, и, если нужно, иконку файла установки и пароль. Нажимаем кнопку Готово. Мастер завершает свою работу, а мы переходим к непосредственному редактированию скрипта.

Сразу скажу, что с «Inno Setup Compiler» поставляется довольно подробный файл справки, поэтому за списком поддерживаемых секций, команд и флагов идем и смотрим справку. Если мы протестируем сейчас наш инсталлятор, то увидим, что на данный момент он только распаковывает входящие в его состав файлы и на этом завершает свою работу. Но нам нужно, чтобы автоматически запускалась установка среды AIR и .air файла нашего приложения. Для реализации этой задачи нам нужно добавить в скрипт установки секцию Run, в которой мы и опишем процесс установки этих файлов:

CODE:
  1. [Run]
  2. Filename: "{src}apollo_win_alpha1_031907.msi"; StatusMsg: "Installing Apollo Runtime Alpha..."; Flags: shellexec waituntilterminated
  3. Filename: "{src}App.air"; StatusMsg: "Installing Apollo Application..."; Flags: shellexec waituntilterminated

В этой секции указываются пути к файлам, запуск которых должен быть произведен. Я использовал префикс {src}, чтобы указать на папку, в которой находится инсталлятор. Добавил сообщение, которое будет описывать, что именно выполняется в настоящий момент, обозначив его в параметре StatusMsg. В качестве дополнительных флагов указал shellexec, который сообщит нашему инсталлятору, что запускаемый файл не является исполняемым .com или .exe файлом, а так же флаг waituntilterminated, который заставит инсталлятор дождаться полного прекращения работы запускаемого процесса и заблокировать при этом интерфейс окна инсталлятора.

Скомпилируйте инсталлятор и убедитесь в том, что все работает как надо. Конечный скрипт установки должен выглядеть следующим образом:

CODE:
  1. [Setup]
  2. AppName=Apollo Application Installer Pack
  3. AppVerName= Apollo Application Installer Pack 1.0
  4. AppPublisher=CompanyName corp.
  5. AppPublisherURL=http://www.companyname.com/
  6. AppSupportURL=http:// www.companyname.com/support/
  7. AppUpdatesURL= http:// www.companyname.com/update/
  8. CreateAppDir=no
  9. CreateUninstallRegKey=no
  10. OutputDir=..deploy
  11. OutputBaseFilename=setup
  12. Compression=lzma
  13. SolidCompression=yes
  14.  
  15. [Languages]
  16. Name: "english"; MessagesFile: "compiler:Default.isl"
  17. Name: "russian"; MessagesFile: "compiler:LanguagesRussian.isl"
  18.  
  19. [Files]
  20. Source: "..deployApp.air"; DestDir: "{src}"; Flags: ignoreversion
  21. Source: "..assetsapollo_win_alpha1_031907.msi"; DestDir: "{src}"; Flags: ignoreversion
  22. ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
  23. [Run]
  24. Filename: "{src}apollo_win_alpha1_031907.msi"; StatusMsg: "Installing Apollo Runtime Alpha..."; Flags: shellexec waituntilterminated
  25. Filename: "{src}App.air"; StatusMsg: "Installing Apollo Application..."; Flags: shellexec waituntilterminated

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

8 комментариев

Теги:

Вы искали статьи Майкла Клишина об использовании плагина FDT, или о внедрении Flash ролика в HTML-страницу при помощи SWFObject, или перевод книги «Getting Started with Flex 2» и не нашли их по их обычному адресу? Что ж, спешу вас обрадовать, статьи теперь можно скачать здесь, на этом сайте. С официального разрешения Майкла. Они не будут удалены, пока не потеряют свою актуальность.

А что вы улыбаетесь? Надо же как-то оправдывать название сайта и тащить сюда что ни попадя. Хотя ни к мегаполезным статьям Майкла, ни к переводу последняя фраза ни в коей степени не относится...

P.S.: Постоянные ссылки на статьи добавлены в раздел «Downloads».

5 комментариев

Теги:
22 августа 2006

MTASC FAQ

С любезного разрешения Николя Каннассе (Nicolas Cannasse) перевел главную страницу сайта MTASC.org. В результате получился своеобразный MTASC FAQ. Странно, что до сих пор никто этого не сделал. По-моему, время сэкономленное в результате использования самого быстрого в мире компилятора .as файлов гораздо больше чем время, потраченное на перевод этой статьи. Но так или иначе теперь для многих статьи Constantiner-а, в которых он пишет про компиляцию с использованием MTASC-а, станут более понятными.

Содержание:

Знакомство

MTASC Logo
MTASC — это первый бесплатный ActionScript компилятор с открытыми исходными кодами.

Он может компилировать большое число .as файлов классов за очень короткое время и немедленно сгенерировать соответствующий байткод в SWF файл без необходимости в наличии Macromedia Flash и других приложений.

Вы можете загрузить его прямо сейчас, но прежде прочтите сравнение между MTASC и Macromedia Compiler (MMC), который поставляется вместе с Flash. Если это ваш первый опыт использования MTASC, прочтите инструкцию по установке и использованию MTASC. Пожалуйста, посетите также сайт сообщества OSFlash.

Добавьте логотип MTASC на ваш сайт!

Установка

Ниже приведена инструкция по установке MTASC для его использования из-под командной строки на операционных системах семейства Windows.

Для начала, загрузите соответствующую для вашей системы сборку MTASC и инсталлируйте/распакуйте все, что входит в ее состав, на ваш компьютер. Затем добавьте путь до исполняемого файла в переменную среды PATH (смотрите http://www.chem.gla.ac.uk/~louis/software/faq/q1.html, если вы не знаете как это делается). Например, если вы проинсталлировали компилятор в папку c:\program files\mtasc, то в качестве переменной среды вы должны будете добавить c:\progra~1\mtasc. Теперь все готово к использованию. Вы можете создать файл compile.bat, содержащий следующий текст:

CODE:
  1. mtasc.exe ВашФайл.as -swf ВашПроект.swf
  2. pause

Поместите файл compile.bat совместно с файлами вашего проекта и запустите его, когда вам нужно будет скомпилировать проект.

Использование

MTASC — компилятор, работающий из-под командной строки. Он может легко интегрироваться с вашим любимым редактором .as файлов для их компилирования с его помощью. В основном, использование компилятора заключается в вызове следующей команды: mtasc "путь_до_ваших_.as_файлов_классов" -swf "путь_до_swf_файла_вашего_проекта". Помните, что если вы имеете два класса, например, Point и Line, причем класс Point используется в коде класса Line, то вам нет необходимости указывать компилятору, чтобы он скомпилировал класс Point. MTASC сделает это автоматически, как только в коде класса Line обнаружит ссылку на класс Point. Поэтому, если вы хотите включить в приложение минимальное количество классов, необходимых для запуска приложения, то вы можете просто скомпилировать, используя класс Main.as, где Main.as — главный класс вашего проекта, содержащий точку входа в приложение.

Теперь, когда вы знаете, как обращаться с MTASC, давайте посмотрим как он работает. MTASC находит соответствующий SWF файл когда обнаруживает параметр -swf, компилирует все необходимые .as файлы и обновляет SWF файл путем замещения всех классов, которые до этого в нем содержались, на новые скомпилированные классы.

Очень просто начать использовать MTASC вместо MMC. Откройте свой проект и опубликуйте его так, как вы обычно это делаете с помощью Macromedia Flash (предположим, что скомпилированный файл называется project.swf). Теперь запустите MTASC, используя путь до опубликованного SWF файла в качестве аргумента: mtasc (ваши .as файлы) -swf project.swf. Все классы будут скомпилированы и обновлены в SWF файле. Помните, что MTASC добавляет скомпилированные классы в SWF файл путем замещения всех классов, до этого скомпилированных во Flash.

Если во время компиляции у вас возникают ошибки, такие как «Класс не найден» (class not found), «Файл не найден» (file not found), «Ошибка в имени класса» (class name mistake), то вам следует использовать параметр -cp для того, чтобы добавить путь к пакету классов (другими словами, директорию, в которой следует искать .as файлы). Например, если ваши классы находятся в папке /code, то не нужно вызывать команду mtasc code/Hello.as, потому что это приведет к поиску класса code.Hello (вместе с названием пакета), а нужно вызвать mtasc -cp code Hello.as.

Ниже приведены остальные параметры использования MTASC:

  • -swf файл — задает файл SWF, в который будут помещены скомпилированные файлы классов;
  • -cp путь — добавляет директорию в ClassPath проекта. В этом параметре задаются директории, в которых MTASC будет искать .as файлы с классами. Вы можете несколько раз использовать этот параметр, для добавления нескольких директорий;
  • -main — производит автоматический вызов метода main, для основного класса ролика. Внимание: метод main должен принимать один параметр container:MovieClip, в качестве которого MTASC передаст ссылку на основную временную диаграмму _root ролика. Чтобы понять почему это важно, прочитайте эту статью;
  • -header width:height:fps:bgcolor — вместо использования готового SWF файла, заставляет MTASC скомпилировать новый файл, содержащий только код, и использовать для этого предопределенные параметры публикации. Параметр bgcolor - необязательный. В качестве него вы должны подставить шестнадцатеричное число (например, FF0000);
  • -mx — использовать заранее скомпилированные MX классы (смотрите ниже секцию о компонентах V2).

А вот другие аргументы, предназначенные для опытных пользователей:

  • -version номер_версии — определяет версию SWF файла. Обозначьте версию 6, для создания SWF, совместимого с 6r89 сборкой проигрывателя. Или версию 8, для того, чтобы использовать возможности 8 версии плеера;
  • -v — активирует подробный режим, в котором выводится дополнительная информация о процессе компиляции;
  • -out путь_к_файлу — изменяет адрес конечного SWF файла;
  • -msvc — использование стиля форматирования ошибок как в Microsoft Visual Studio, а не стиля Java (для имен файлов и номеров линий);
  • -strict — будет использован строгий режим компиляции, требующий, чтобы все переменные были типизированы;
  • -exclude файл — исключает генерацию кода для классов, перечисленных в специальном файле (каждый из путей к исключаемым классам, должен располагаться на новой строке этого файла);
  • -trace функция — определяет пользовательскую функцию трассировки (см. секцию «Средства трассировки») или no для деактивации всех действий трассировки;
  • -keep — сохраняет все AS2 классы, скомпилированные Macromedia компиллером в SWF файле (это также действует на классы, которые до этого были скомпилированы при помощи MTASC);
  • -frame номер_кадра — позволяет экспортировать AS2 классы в определенный кадр ролика;
  • -pack путь_до_пакета — компилирует все классы, содержащиеся в указанном пакете без рекурсии (так, для компиляции файлов из папки c:\flash\code\my\app пакета my.app, необходимо вызвать команду mtasc -cp c:\flash\code -pack my/app);
  • -group — объединяет классы в один единственный клип (это приводит к уменьшению размера SWF, но может привести к возникновению проблем, при использовании параметров -keep и -mx);
  • -wimp — добавляет предупреждения для инструкций импорта, которые не используются в файле класса;
  • -infer — добавляет предугадывание типа при инициализации локальных переменных (см. ниже).

Примеры

Теперь вы знаете, как использовать MTASC с помощью командной строки. В следующих простых примерах мы рассмотрим, как с ним работать. В первом примере не используется заранее подготовленный файл SWF с содержимым, поэтому создается новый файл, содержащий только код класса Tuto.as, выводящего в текстовом поле некоторый текст:

Actionscript:
  1. class Tuto {
  2.  
  3.     static var app : Tuto;
  4.  
  5.     function Tuto(container:MovieClip) {
  6.         // Создаем текстовое поле 'tf' с размерами 800x600
  7.         // и координатами 0,0.
  8.         container.createTextField("tf",0,0,0,800,600);
  9.         // Выводим текст в текстовом поле.
  10.         container.tf.text = "Hello world !";
  11.     }
  12.  
  13.     /**
  14.      * Точка входа в приложение.
  15.      *
  16.      * @param   container  Ссылка на основную временную диаграмму ролика _root.
  17.      */
  18.     static function main(container:MovieClip):Void {
  19.         app = new Tuto(container);
  20.     }
  21. }

Если вы захотите запустить это приложение, то это можно сделать вызовом следующей команды:

CODE:
  1. mtasc -swf tuto.swf -main -header 800:600:20 Tuto.as

Первый параметр -swf tuto.swf задает имя конечного файла. Третий параметр -header 800:600:20 заставляет MTASC скомпилировать новый SWF с размерами сцены 800x600 пикселов и частотой смены кадров 20 FPS. Второй параметр -main говорит, что необходимо вызвать метод main у всех инициализируемых классов. Последний параметр — компилируемый файл класса. Если вам необходимо скомпилировать несколько файлов, то вы просто можете перечислить их поочередно в командной строке без каких-либо проблем. Однако, не включайте таким способом пути к большому количеству файлов, компилируемых с помощью MTASC, используйте для этого параметр -cp (см. ниже).

Если для вашего кода необходимо использование библиотеки классов, которая локально расположена где-нибудь на вашем компьютере, то вам нужно использовать параметр -cp, чтобы MTASC смог найти нужные файлы классов. Например, если вы используете класс mx.controls.Button, расположенный на вашем жестком диске в папке C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes\mx\controls, вам нужно вызвать следующую команду:

CODE:
  1. mtasc -cp "C:\Program Files\Macromedia\Flash MX 2004\en\First Run\Classes"

Не забывайте пути к классам, содержащие пробелы, указывать в кавычках и не забывайте удалять пути к файлам, если необходимости в их компиляции уже нет. Если вам нужно скомпилировать класс app.File.as, расположенный на жестком диске по адресу C:\My Project\app\File.as, запустите следующую команду:

CODE:
  1. mtasc -cp "C:\My Project" app\File.as

Если вам необходимо скомпилировать все файлы из пакета app, то используйте параметр -pack app и, если необходимо, параметр -cp для компиляции других классов.

Загрузка

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

Другие инструменты:

  • Графический интерфейс, созданный человеком по имени Daniel Aguilar (не возьмусь переводить фамилию) доступен по адресу http://www.protozoo.com;
  • Другой GUI для MacOSX: http://www.telefonica.net/web2/xmtasc.

Контакты

Если у вас возникают проблемы при использовании MTASC, или у вас есть вопросы, или предложения по добавлению новых возможностей в MTASC, то вы можете подписаться на мэйл лист. Здесь же вы можете поискать в архиве сообщений ответ на вопрос, аналогичный вашему. Если вы не хотите использовать лист рассылки, или если вы хотите получить информацию или персональную поддержку, вы можете связаться с создателями MTASC, воспользовавшись следующим адресом электронной почты: ncannasse@motion-twin.com.

Если вы ищете ресурс о других бесплатных Flash приложениях, то посетите сайт OSFlash.org, там содержится огромное количество информации на эту тему. В частности, именно на нем в настоящий момент расположен MTASC FAQ, в качестве одного из разделов Wiki.

Использование компонентов (пакет MX)

MTASC позволяет использовать при компиляции компоненты Macromedia V2, но для этого рекомендуется добавлять дополнительный параметр: -mx. Ниже показан простой пример использования компонентов.

  1. Давайте напишем небольшое приложение, использующее Macromedia V2 компоненты, состоящее из одного файла класса Test.as:
    Actionscript:
    1. class Test {
    2.     function Test() {
    3.         mx.controls.Alert.show("hello world","title");
    4.     }
    5. }

  2. Откройте Flash IDE, создайте новый документ, назовите его «test.fla» и добавьте компонент Alert в библиотеку;
  3. Добавьте следующий код в первый кадр документа: t = new Test(); (это необходимо для того, чтобы ваше приложение заработало);
  4. Опубликуйте файл как test.swf и протестируйте. Должно появиться всплывающее окно;
  5. С этого момента больше нет необходимости во Flash IDE (конечно, если вы не будете использовать другие компоненты). Закройте ее!
  6. Подправьте код приложения Test.as, так как посчитаете нужным (вдруг вы захотите что-нибудь изменить в нем);
  7. Для повторной компиляции с помощью MTASC используйте следующую команду:
    CODE:
    1. mtasc -cp "путь_до_папки_с_классами_компонентов" -mx -swf test.swf Test.as

    Где путем до классов компонентов может быть "c:\program files\macromedia\flash mx 2004\en\First Run\Classes";

  8. Желаем быстрой компиляции!

MTASC и ActionScript 3

Последняя версия MTASC является наиболее стабильной. Так, при обновлении до нее версии 1.11, разработчики в основном фокусировались на исправлении мелких ошибок и общем улучшении работы компилятора. Некоторые люди спрашивают о будущем MTASC. Их интересует, будет ли следующая версия публиковать SWF под девятую версию плеера и поддерживать ActionScript 3.

MTASC не будет иметь поддержки ActionScript 3, так как сейчас ведутся работы над новым мощным языком, названным haXe, который будет поддерживать Flash Player 6-7-8 и 9, также как и JavaScript и серверные скриптовые языки.

Вы можете подробнее узнать об этом на сайте haXe.org.

Сравнение MTASC и Macromedia Flash Compiler

MTASC корректно обрабатывает некоторые известные проблемы, происходящие при использовании Macromedia Compiler (MMC). Он является более строгим компилятором, поэтому может определять большее количество ошибок, что помогает вам в написании более качественных программ. Вследствие этого, появляются некоторые различия между MMC и MTASC, поэтому при первых попытках компиляции с использованием MTASC у вас могут появиться ошибки.

Тем не менее, перед разработчиками компилятора стояли следующие задачи, которые пользователь сейчас может без проблем использовать:

  1. Переходить на компиляцию с использованием или MMC, или MTASC, что поможет исправить многие ошибки в вашем коде, легко и правильно его модифицировать. Это делает ваш код более надежным.
  2. Компилировать с помощью MMC. Разработчики не планируют перевести всех пользователей с MMC на MTASC . И не ставят перед собой задачу создать вокруг этого компилятора собственное сообщество. Как инструмент, MTASC не вносит никаких несовместимых нововведений в язык ActionScript. (Невольно вспоминается война за место под солнцем между браузерами Netscape и IE, приведшая к очень печальным последствиям. — Прим. пер.).

Скорость и баги

MMC ужасно медленный. Он целую вечность компилирует большие проекты, и с этим фактом невозможно не считаться, так как приходится все это время ждать и откладывать дальнейшее редактирование проекта. Кроме того, MMC иногда вынуждает вас перезагружать компьютер или несколько раз компилировать ваш проект, для получения пригодного результата (это связано с багом в использовании оперативной памяти, смотрите статью http://www.actionscript.com/archives/00000591.html для получения дополнительной информации об этой ошибке).

MTASC основан на лучшей из доступных технологий компилирования (а именно, на языке программирования OCaml), и поэтому у него гораздо выше скорость компилирования, чем у MMC (компилирует 100 классов менее чем за 5 секунд). С тех пор, как исходные коды были сделаны более компактными и для их написания использовались хорошие технологии, стало возможным легко поддерживать и расширять его функциональность, применяя испытанные алгоритмы. Обратная связь с разработчиками очень помогает Open Source сообществу в короткие сроки исправлять различные ошибки.

Вывод: Неужели этого еще мало?

Цена и общая стоимость владения

Смотрите предыдущий абзац о том, как MMC тратит попусту ваше время (считайте, что деньги). Если вы профессиональный ActionScript программист, то должны понимать, о чем здесь говорится.

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

Вывод: Разработчики верят, что опенсорсное движение спасет мир и в первую очередь программистов вашей компании.

Отслеживание областей определения локальных переменных

В MMC (да и вообще в Flash Virtual Machine) не блокируется двойное определение переменной внутри функций. Это хорошо иллюстрирует следующий код:

Actionscript:
  1. function f() {
  2.     var x = 1;
  3.     if( true ) {
  4.         var x = "hello";
  5.         // ...
  6.     }
  7.     trace(x+1);
  8. }

Будет выведено "hello1", а не число 2. Следующий код тоже работает, несмотря на то, что он не будет компилироваться во многих традиционных языках программирования:

Actionscript:
  1. function f() {
  2.     if( true )
  3.         var x = 1;
  4.     return x + 1;   // что будет, если в инструкцию if
  5.             // в качестве параметра поступит false?
  6. }

MTASC препятствует возникновению подобных ошибок. Вы не можете создавать новую локальную переменную с аналогичным именем и не можете использовать локальную переменную за пределами области ее объявления. Следующий пример иллюстрирует это:

Actionscript:
  1. function f() {
  2.     {
  3.         var x : Number = 1;
  4.         // ... используйте x как Number
  5.     }
  6.     // вы не можете использовать x здесь
  7.     {
  8.         var x : String = "hello";
  9.         // ... используйте x как String
  10.     }
  11.     // вы не можете использовать x здесь
  12. }

Вывод: сокрытие локальных переменных необходимо для получения более полного контроля над типами переменных и для проверки правильности кода. Flash Virtual Machine недостает лексического отслеживания областей объявления локальных переменных, начиная с предыдущей AS1 версии языка. MTASC во время компиляции активно сообщает вам о конструкциях в коде, подверженых ошибкам, что позволяет экономить много времени во время отладки приложения.

#include

MMC позволяет встраивать фрагменты кода из внешних файлов в ваш ролик с использованием директивы #include.

MTASC не позволяет пользоваться этой директивой.

Рациональность подобного решения: Подобные практики кода вышли из употребления в ActionScript 2, где программисты должны хранить свой код во внешних файлах классов.

Определение локальных функций

MMC позволяет создавать именованные локальные функции:

Actionscript:
  1. function f(x) {
  2.     function g(y) {
  3.         return x+y;
  4.     }
  5. }

MTASC позволяет создавать в теле других функций только литералы функций (т .е. анонимные функции, сохраненные в переменной):

Actionscript:
  1. function f(x) {
  2.     var g = function(y) {
  3.         return x+y;
  4.     };
  5. }

Рациональность подобного решения: Это необходимо для нахождения различий между определением локальной функции и определением метода.

Средства трассировки

MMC предоставляет только простую функцию trace, которая выводит некоторый текст в окно Output (что работает только в IDE). Это не совсем удобно, к тому же многие люди предпочитают вести логи в процессе компиляции и отладки.

MTASC во время компиляции использует переопределенную функцию trace. Допустим у вас есть такой вот класс:

Actionscript:
  1. class Test {
  2.  
  3.     static function main(mc) {
  4.         trace("hello world");
  5.     }
  6.  
  7. }

При компиляции с использованием команды mtasc -trace MyClass.myTrace Test.as (...) все вызовы функции trace будут заменены на вызов функции MyClass.myTrace (т. е. на вашу переопределенную функцию trace) и будут добавлены дополнительные параметры содержащие отладочную информацию. Т. е. будет так, как если бы вы написали:

Actionscript:
  1. class Test {
  2.  
  3.     static function main(mc) {
  4.         MyClass.myTrace("hello world","Test::main","Test.as",4);
  5.     }
  6.  
  7. }

Где дополнительными параметрами являются:

  1. Полное имя класса и имя метода;
  2. Название файла класса;
  3. Номер строки, содержащей вызов функции.

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

Если вы хотите создать окончательную версию вашего приложения, в коде которого не должно содержаться вызовов функции trace, просто используйте параметр командной строки "-trace no" для компиляции приложения и удаления из него всех вызовов trace.

Строгая типизация массивов

MTASC содержит расширения синтаксиса языка, которые позволяют строго типизировать ваши массивы, сохраняя при этом совместимость с ActionScript 2:

Actionscript:
  1. var x : /*String*/ Array;

Объявленным типом этой переменной является массив (Array), содержащий строки (String). Все обращения к элементам массива для чтения и записи будут проверяться на соответствие типу данных String, к которому принадлежат все элементы этого массива. Типизация элементов массивов — это только дополнительная проверка, производимая компилятором. Она не производится на этапе исполнения приложения. Будьте внимательны и не допускайте пробелов между "/*" и "*/".

Предугадывание типа локальных переменных

Если вы используете параметр командной строки -infer, то для всех локальных переменных, которым присвоено какое-либо начальное значение, автоматически объявляется их тип так, как показано ниже:

Actionscript:
  1. var x : String = "hello";
  2. var x : Number = Math.cos(Math.PI);
  3. var x : MyClass = new MyClass();

Все эти инструкции могут быть получены из следующего кода путем его компиляции с параметром -infer:

Actionscript:
  1. var x = "hello";
  2. var x = Math.cos(Math.PI);
  3. var x = new MyClass();

Вы можете использовать параметр -infer совместно с параметром -strict и ошибки несоответствия типов больше не будут выводиться, поскольку объявленный тип переменных всегда будет совпадать с присваиваемыми им значениями.

Другие незначительные отличия

  • массив arguments поддерживается, однако к нему нельзя обратиться динамически (с помощью eval("arguments"), например);
  • при компилировании с помощью MTASC, тип параметров сеттеров и возвращаемый тип геттеров могут отличаться друг от друга;
  • при компиляции с использованием MTASC, функции, неимеющие в своем теле инструкции return, автоматически типизируются как возвращающие Void;
  • не поддерживается инициализация членов класса за пределами тела класса (только если это не константа и не статический метод);
  • при компиляции с помощью MTASC свойство клипов root недоступно при вызове без соответствующего контекста. Например, если вы используете _parent внутри класса, в котором не определено соответсвующее свойство, «посыплятся» ошибки компиляции;
  • eval(this) не работает.

Логотип MTASC для вашего сайта

MTASC
Вы можете разместить на своем сайте этот маленький банер (88x31, GIF, 2k) для того, чтобы помочь в продвижении бесплатного компилятора MTASC и open source сообщества:

HTML:
  1. <a href="http://www.mtasc.org">
  2.     <img src="http://www.mtasc.org/img/mtasc_88x31.gif"
  3.         title="MotionTwin AS2 Compiler"
  4.         alt="MTASC"
  5.         style="border:0px;"
  6.     />
  7. </a>

3 комментария

Теги: