|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2010
Сообщений: 12
|
AIR mobile, внешний swf и события от мыши
Добрый день форучане!
Столкнулся с очень непонятной ситуацией. Создаю проект AIR-mobile, в нём простой загрузчик внешней swf (без кода, просто один клип с шейпом в нём), указываю контекст, всё как положено. Файл пробовал грузить и с диска, локально и с сайта и из локального хранилища приложения (app-storage). Всё загружается, вешаю события от мыши на загруженный клип, на сцену и на созданный программно спрайт. И вот тут начинаются странности - события от мыши не поднимаются по стэку объектов, т.е если кликаем по спрайту - события получает только он, но не клип и не сцена, если по клипу - то только он и не сцена. Переношу ровно этот же код в приложение AIR-flashplayer и события работают как положено. Единственное отличие тут - вызов Security.allowDomain("*"), который для mobile-версии конечно не работает. Что это? Баг Adobe? Вот код данного примера: private function testLoad3(a_strURL:String): void { var loader:Loader; var context:LoaderContext; loader = new Loader(); context = new LoaderContext(false, ApplicationDomain.currentDomain, null); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest(a_strURL), context); } private function onComplete(e:Event):void { var loader:Loader = LoaderInfo(e.currentTarget).loader; var content:MovieClip = loader.content as MovieClip; addChild(content); var clip:Sprite = new Sprite(); clip.graphics.beginFill(0x00FF00, 0.5); clip.graphics.drawRect(200, 200, 200, 200); clip.buttonMode = true; content.addChild(clip); clip.addEventListener(MouseEvent.CLICK, onClickSprite); content.addEventListener(MouseEvent.CLICK, onClickClip); stage.addEventListener(MouseEvent.CLICK, onClickStage); } private function onClickSprite(e:MouseEvent):void { trace("Sprite clicked"); } private function onClickClip(e:MouseEvent):void { trace("Clip clicked"); } private function onClickStage(e:MouseEvent):void { trace("Stage clicked"); } |
|
|||||
Регистрация: Jun 2010
Сообщений: 12
|
Вообще Adobe советует использовать именно мышиные события, если нет особой необходимости.
А Touch вообще что-то не работает, может потому что на эмуляторе тестируем, а на устройстве будут? В любом случае, тут явно дело в Security, если тот же Sprite из примера приаттачить не к загруженному клипу, а прямо к stage, то события через Sprite до stage доходят. Т.е. загруженный клип таким образом изолируется что ли? Добавлено через 19 минут Попробовали на устройстве с Touch'ами - та же история, события не всплывают. |
|
|||||
Регистрация: Jun 2010
Сообщений: 12
|
Вот тестовый проект для FlashBuilder.
Собственно проблему мы решили, вот тут описан обходной хак: https://code.google.com/p/maashaack/...licationDomain В AIR действительно есть какие-то не очень внятные ограничения на скачиваемые swf. Всё что нужно сделать, так это загрузить нужную нам swf обычным способом через Loader.load, а после эти загруженные данные загрузить ещё раз, но через Loader.loadBytes, который игнорирует Security-ограничения. |
Часовой пояс GMT +4, время: 15:30. |
|
« Предыдущая тема | Следующая тема » |
|
|