Показать сообщение отдельно
Старый 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");
		}