- Event Generator - генератор событий. Необходимо выбрать мувиклип, открыть панель (Window > Other Panels), определить необходимые события, скопировать в буфер и потом вставить готовый код куда нужно. Это значительно облегчает монотонные записи добавления событий.
- Калькулятор - считаем не выходя из любимой IDE.
- Панель заметок позволяет легко сохранять интересные куски кода с названиями.
пятница, февраля 29, 2008
Улучшаем Flash 9 IDE
четверг, февраля 28, 2008
Использование RSL классов фреймворка и кэширование в плеере
Каждое Flex приложение использует Flex фреймворк, который сам по себе является широким набором классов, определяющих инфраструктуру приложения. Если пользователь загружает два различных приложения, то эти приложения будут содержать одни и те же классы фреймворка.
Чтобы не внедрять одни и те же классы на этапе компиляции, можно использовать внешние библиотеки классов (Runtime Shared Libraries или RSL) классов flex-фреймворка, то есть подгружать эти классы на этапе загрузки приложения. Существует два вида RSL классов фреймворка – подписанные и неподписанные. Подписанные RSL кэшируются плеером, доступ к ним возможен из любых приложений вне зависимости от доменов. Они не удаляются при очистке кэша браузера. Неподписанные RSL кэшируются браузером и могут использоваться только приложениями, которые имеют доступ к домену RSL.
Flash Player 9.0.115 поддерживает загрузку подписанных RSL классов фреймворка. Эти RSL имеют расширение SWZ, и только Adobe может их создавать. Для плееров версий ниже 9.0.115 будут автоматически загружаться запасные неподписанные RSL, если конечно они были определены при компиляции приложения.
Только приложения, скомпилированные с помощью Flex 3, могут использовать подписанные RSL.
Существующие RSL
Для SDK RSL классов фреймворка находятся в папке flex_sdk_dir/frameworks/rsls, для Flex Builder - flex_builder_dir/sdks/3.0.0/frameworks/rsls. Файлы именуются следующим образом – версия Flex плюс версия сборки компилятора. Следующие RSL классов фреймворка включены в продукты Flex:
- framework_3.0.build_number.swz (подписанная RSL классов фреймворка)
- framework_3.0.build_number.swf (неподписанная RSL классов фреймворка)
- rpc_3.0.build_number.swz (подписанная RSL классов сервисов данных (data services)
- rpc_3.0.build_number.swf (неподписанная RSL классов сервисов данных)
- (Только для Flex Builder) datavisualization_3.0.build_number.swz (подписанная RSL классов визуализации данных)
- (Только для Flex Builder) datavisualization_3.0.build_number.swf (неподписанная RSL классов визуализации данных)
Данные библиотеки уже оптимизированы.
Flex также включает некоторые SWC файлы, которые можно использовать как стандартные или кросс-доменные RSL. Эти библиотеки неоптимизированны и не подписаны. Они находятся в папке frameworks/libs: automation.swc и qtp.swc. Это классы для автоматизированного тестирования приложения.
Кэш плеера
По умолчанию, максимальный размер кэша плеера равен 20MB. После превышения этого размера кэш автоматически очищается от файлов, которые реже всего использовались. Очистка происходит, пока размер кэша не станет меньше 60%, то есть по умолчанию 12MB. С помощью Settings Manager можно регулировать место, отведенное под кэш плеера.
В следующей таблице показаны папки, в которых плеер хранит кэш:
Windows Vista - C:\Users\user_name\AppData\Roaming\Adobe\Flash Player\AssetCache\
Linux - /home/user_name/.adobe/Flash_Player/AssetCache/
Mac OSX - /Users/user_name/Library/Cache/Adobe/Flash Player/AssetCache/
Использование RSL классов фоеймворка
Использовать RSL классов фреймворка просто:
- заходим в свойства проекта;
- Flex Build Path -> Library Path
- Раскрываем Flex 3 -> framework.swc -> Link type -> Edit
- Ставим в выпадающем списке RSL и добавляем (Add) 2 файла – framework_build_number.swz и framework_build_number.swf
- Теперь эти два файла сохранятся в вашем проекте
Кстати, размер пустого приложения при использовании внешних библиотек сократился со 150 Кб до 50, правда сама библиотека весит порядка 550Кб, но она сохраняется в кеше и грузится только один раз.
среда, февраля 27, 2008
Проект Open Flash Chart
Проект в первую очередь разрабатывается для PHP, но есть версии и для Java, Perl, Python, Ruby and Rails и .NET (правда, не факт, что они будут той же версии, что и для PHP). В частности, для Ruby and Rails плагин, которые позволяет в два счета создать нужный график.
Кстати, использовать графики можно абсолютно бесплатно, но помощь приветствуется.
четверг, февраля 14, 2008
E4X запросы с учетом namespace'ов
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<item>
<title>News feeds from the BBC</title>
<description></description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/help/rss/3223484.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/help/rss/3223484.stm</guid>
<pubDate>Mon, 21 Aug 2006 08:34:42 GMT</pubDate>
<category>RSS</category>
<media:group>
<media:category>RSS</media:category>
<media:copyright>(C) British Broadcasting Corporation</media:copyright>
</media:group>
</item>
</channel>
</rss>
Чтобы получить данные тегов из пространства имен media необходимо поступить следующим образом:1) создать пространство имен
var media:Namespace = new Namespace("http://search.yahoo.com/mrss/");
2) обращаться к необходимым узлам с использованием этого пространства имен
var copyright:String = xml.channel.item.media::group.media::copyright.text();
3) Ответ верный:
(C) British Broadcasting Corporation
пятница, февраля 01, 2008
Ошибка при отсутствии атрибута в XML
<data>
<row owner="Andrey"/>
<row owner="Peter"/>
<row/>
</data>
Нам необходимо получить все записи, у которых owner = "Andrey".
Делаем как всегда:
var res:XML = httpServ.lastResult as XML;
var rows:XMLList = res.row.(@owner=="Andrey");
Вылезает ошибка:
ReferenceError: Error #1065: Variable @owner is not defined.
Чтобы решить эту проблему в лоб, нужно для всех узлов прописать атрибут owner, что не очень хорошо. Поэтому есть альтернативные виды получения этой информации:
1 способ:
var rows:XMLList = res.row.(attribute("owner")=="Andrey");
2 способ:
var xml:XMLList = res.row.(hasOwnProperty("@owner")==true && @owner=="Andrey");