вторник, апрель 15, 2008
Да, в AIR можно использовать своё контекстное меню, добавлять подменю и т.д. Мы даже можем вызвать его, когда захочем, а не только по правому клику. Для этого у класса NativeMenu есть метод:
- NativeMenu.display(stage:Stage, stageX:Number, stageY:Number):void
Всё бы хорошо, но есть одно но
Как Вы видите метод display() принимает первым параметром Stage, но у SystemTrayIcon нет stage
Т.е. если нам нужно отобразить меню возле трея (с помощью display()), то нужно использовать Application.application.stage, но тогда нам нужно будет поразмыслить как спозиционировать меню
Ведь координаты SystemTrayIcon неизвестны…
Теґи: AIR, NativeMenu, SystemTrayIcon
Категорії: AIR, Найденные блохи | Коментарів: 87 »
четверг, март 27, 2008
Если Вы вставите метатег [MIXIN] в Вашем классе (чуть выше определения класса), то при старте Flex-аппликухи будет запущена статическая функция init():
- public static function init(root:DisplayObject):void
А запустит её SystemManager.
В помощи Flex есть упоминания про этот метатег, найти их можна выполнив поиск по слову mixin 
Теґи: [MIXIN]
Категорії: Flex Builder 2, Flex Builder 3, Flex Framework 3, Полезные блохи | Коментарів: 91 »
пятница, март 21, 2008
Мы знаем, что при встраивании swf с помощью тега [Embed] весь код, который был в swf-ке, утрачивается. Есть один способ как уберечь код.
Сначала создадим во Flash IDE флэшку, главным классом которой будет, например, assets.Flea. В этом классе сделаем метод startJumping(), который просто будет начинать проигрывание флэшки. Файл назовём flea.swf.
Теперь встроим flea.swf в какой-нибудь класс во Flex-проекте:
- [Embed(”assets/flea.swf”, mimeType=”application/octet-stream”)]
- private var FleaAsset:Class;
mimeType=”application/octet-stream” даёт понять компилятору Flex, что встраивание нужно проводит без никаких конвертаций.
Теперь во FleaAsset мы имеем класс ByteArrayAsset, т.е., практически ByteArray.
Далее загружаем экземпляр FleaAsset в Loader с помощью loadBytes():
- var currLoader:Loader = new Loader();
- var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
- currLoader.loadBytes( new FleaAsset(), ldrContext );
ldrContext мы используем, что бы быть уверенными, что класс, который находиться в FleaAsset будет тем же самым, что и во Flex проекте.
Далее, что бы класс из FleaAsset появился для нашего использования нам нужно подождать один кадр. Это не очень хорошо, но как это обойти я не знаю.
- var sprite:Sprite = new Sprite();
- sprite.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
Далее, мы просто создаём экземпляр класса assets.Flea и используем его как хотим. Вся графическая часть, созданная во Flash IDE останется
- import assets.Flea;
- function enterFrameHandler(event:Event):void
- {
- var flea:Flea = new Flea();
- addChild(flea);
- flea.startJumping();
- sprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
- }
Я сделал пример библиотечки, которая может упростить работу с встроенными swf.
Что бы узнать больше, рекомендую почитать ещё следующее (на английском):
Теґи: application/octet-stream, ByteArrayAsset, Flash IDE, mimeType, [Embed]
Категорії: ActionScript 3.0, Flash IDE, Flex Builder 2, Flex Builder 3, Полезные блохи | Коментарів: 66 »
четверг, март 20, 2008
В ActionScript проекте (имеется в виду проект во Flex Builder) параметры swf файла Вы можете задать с помощью метатега SWF:
[SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
Поместите его перед определением главного класса.
Теґи: metatag, SWF
Категорії: Flex Builder 2, Flex Builder 3, Полезные блохи | Коментарів: 64 »
среда, март 19, 2008
Я практически уверен, что Вы хоть раз искали метод removeAllChildren() в DisplayObjectContainer
Вот, по-моему, самая элегантная реализация (подсказали Адобовцы):
- public function removeAllChildren():void
- {
- while (numChildren > 0)
- removeChildAt(0);
- }
Теґи: DisplayObjectContainer.removeAllChildren()
Категорії: ActionScript 3.0, Полезные блохи | Коментарів: 62 »