Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.05.2015, 20:04
AlexeyB2010 вне форума Посмотреть профиль Отправить личное сообщение для AlexeyB2010 Найти все сообщения от AlexeyB2010
  № 1  
Ответить с цитированием
AlexeyB2010

Регистрация: Jun 2010
Сообщений: 12
По умолчанию AIR mobile, внешний swf и события от мыши

Добрый день форучане!
Столкнулся с очень непонятной ситуацией.
Создаю проект AIR-mobile, в нём простой загрузчик внешней swf (без кода, просто один клип с шейпом в нём), указываю контекст, всё как положено. Файл пробовал грузить и с диска, локально и с сайта и из локального хранилища приложения (app-storage).
Всё загружается, вешаю события от мыши на загруженный клип, на сцену и на созданный программно спрайт.
И вот тут начинаются странности - события от мыши не поднимаются по стэку объектов, т.е если кликаем по спрайту - события получает только он, но не клип и не сцена, если по клипу - то только он и не сцена.

Переношу ровно этот же код в приложение AIR-flashplayer и события работают как положено. Единственное отличие тут - вызов Security.allowDomain("*"), который для mobile-версии конечно не работает.
Что это? Баг Adobe?

Вот код данного примера:
Код AS3:
		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");
		}

Старый 22.05.2015, 20:48
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну так на мобилах же Touch а не мышь. Видимо там полноценной поддержки мыши вообще не предустмотрено. Тач события работают как надо

Старый 22.05.2015, 21:20
AlexeyB2010 вне форума Посмотреть профиль Отправить личное сообщение для AlexeyB2010 Найти все сообщения от AlexeyB2010
  № 3  
Ответить с цитированием
AlexeyB2010

Регистрация: Jun 2010
Сообщений: 12
Вообще Adobe советует использовать именно мышиные события, если нет особой необходимости.
А Touch вообще что-то не работает, может потому что на эмуляторе тестируем, а на устройстве будут?

В любом случае, тут явно дело в Security, если тот же Sprite из примера приаттачить не к загруженному клипу, а прямо к stage, то события через Sprite до stage доходят.
Т.е. загруженный клип таким образом изолируется что ли?

Добавлено через 19 минут
Попробовали на устройстве с Touch'ами - та же история, события не всплывают.

Старый 29.05.2015, 16:48
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 4  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Соберите минимальный тестовый пример воспроизводящий проблему, мне даже интересно стало, разрабатываю под мобилы и никогда не замечал отличий MouseEvent на них от обычного плеера.

Старый 01.06.2015, 19:03
AlexeyB2010 вне форума Посмотреть профиль Отправить личное сообщение для AlexeyB2010 Найти все сообщения от AlexeyB2010
  № 5  
Ответить с цитированием
AlexeyB2010

Регистрация: Jun 2010
Сообщений: 12
Вот тестовый проект для FlashBuilder.

Собственно проблему мы решили, вот тут описан обходной хак: https://code.google.com/p/maashaack/...licationDomain
В AIR действительно есть какие-то не очень внятные ограничения на скачиваемые swf. Всё что нужно сделать, так это загрузить нужную нам swf обычным способом через Loader.load, а после эти загруженные данные загрузить ещё раз, но через Loader.loadBytes, который игнорирует Security-ограничения.
Вложения
Тип файла: zip AIRTest3.zip (30.1 Кб, 43 просмотров)

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.