![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Сообщений: 121
|
Создал swf под Андроид. Хочу загрузить в него другой swf с листалкой, который тоже сделан под Андроид.
Если при компиляции назначение родительского swf Flash Player 20, то грузится нормально. Но если назначение родительского swf AIR 20.0 for Android, тогда программа выдаёт ошибку: SecurityError: Error #2070: Security sandbox violation: caller file:///G:/№2/Листалка/perelistyvanie.swf cannot access Stage owned by app:/Родительский.swf. at flash.display::Stage/requireOwnerPermissions() at flash.display::Stage/addEventListener() at perelistyvanie_fla::MainTimeline/frame1()[perelistyvanie_fla.MainTimeline::frame1:8] Вот код листалки, на всякий случай. Код полностью рабочий. Multitouch.inputMode = MultitouchInputMode.GESTURE; var currentGalleryItem:Number = 1; var totalGalleryItems:Number = 4; stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeToGoToNextPreviousFrame); function fl_SwipeToGoToNextPreviousFrame(event:TransformGestureEvent):void { if(event.offsetX == 1) { if(currentGalleryItem > 1){ currentGalleryItem--; slideRight(); } } else if(event.offsetX == -1) { if(currentGalleryItem < totalGalleryItems){ currentGalleryItem++; slideLeft(); } } } var slideCounter:Number = 0; function slideLeft(){ gallery_items.addEventListener("enterFrame", moveGalleryLeft); (root as MovieClip).nextFrame(); } function slideRight(){ gallery_items.addEventListener("enterFrame", moveGalleryRight); (root as MovieClip).prevFrame(); } function moveGalleryLeft(evt:Event){ gallery_items.x -= 48; slideCounter++; if(slideCounter == 10){ gallery_items.removeEventListener("enterFrame", moveGalleryLeft); slideCounter = 0; } } function moveGalleryRight(evt:Event){ gallery_items.x += 48; slideCounter++; if(slideCounter == 10){ gallery_items.removeEventListener("enterFrame", moveGalleryRight); slideCounter = 0; } } |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Попытка обратиться к stage, когда он ещё не существует. Нужно сначала поставить слушатель добавления на stage.
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 121
|
Цитата:
Я так понимаю, что куда-то надо вставить addEventListener. Правильно? |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Да, в конструктор главного класса флешки addEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
Ну и соответствующий метод. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 121
|
Пробую, что-то не получается. Нужно это вставить в код подгружаемой флешки? В ту, которая с листалкой?
|
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
В код подгружаемой
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 121
|
Я так и делаю. Не пойму, чего-то не хватает. Выдаёт ошибку:
Но ставить точку с запятой перед скобками - это же неправильно? |
|
|||||
|
Цитата:
Цитата:
То есть stage то он видит, но по соображениям безопасности доступ к нему ограничен. Надо грузить флешку указывая контекст загрузки Вот код из одной из моих игр, в которой грузились swf с сервера var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderCompele); if (Security.sandboxType == Security.REMOTE) { var context:LoaderContext = new LoaderContext(); context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); loader.loadBytes(byteArray, context); } else { loader.loadBytes(byteArray); } Цитата:
п.с. Никогда не называй файлы кириллицей и никогда не используй пробелы в называниях файлов. Только латиница и числа. Иначе хватанешь какой-нибудь непонятный баг, и будешь долго искать причины и ломать голову, "что же не так?"
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 121
|
Цитата:
Вот код родительского swf (в который загружаю) stop(); btn.addEventListener(MouseEvent.CLICK, fl_ClickToLoadUnloadSWF); import fl.display.ProLoader; var fl_ProLoader:ProLoader; var fl_ToLoad:Boolean = true; function fl_ClickToLoadUnloadSWF(event:MouseEvent):void { if(fl_ToLoad) { fl_ProLoader = new ProLoader(); fl_ProLoader.load(new URLRequest("file:///C:/Users/Саша/Desktop/Listalka.swf")); addChild(fl_ProLoader); } else { fl_ProLoader.unload(); removeChild(fl_ProLoader); fl_ProLoader = null; } fl_ToLoad = !fl_ToLoad; } stop(); Multitouch.inputMode = MultitouchInputMode.GESTURE; var currentGalleryItem:Number = 1; var totalGalleryItems:Number = 4; stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeToGoToNextPreviousFrame); function fl_SwipeToGoToNextPreviousFrame(event:TransformGestureEvent):void { if(event.offsetX == 1) { if(currentGalleryItem > 1){ currentGalleryItem--; slideRight(); trace ("Листает"); } } else if(event.offsetX == -1) { if(currentGalleryItem < totalGalleryItems){ currentGalleryItem++; slideLeft(); } } } var slideCounter:Number = 0; function slideLeft(){ gallery_items.addEventListener("enterFrame", moveGalleryLeft); (root as MovieClip).nextFrame(); } function slideRight(){ gallery_items.addEventListener("enterFrame", moveGalleryRight); (root as MovieClip).prevFrame(); } function moveGalleryLeft(evt:Event){ gallery_items.x -= 48; slideCounter++; if(slideCounter == 10){ gallery_items.removeEventListener("enterFrame", moveGalleryLeft); slideCounter = 0; } } function moveGalleryRight(evt:Event){ gallery_items.x += 48; slideCounter++; if(slideCounter == 10){ gallery_items.removeEventListener("enterFrame", moveGalleryRight); slideCounter = 0; } } SecurityError: Error #2070: Security sandbox violation: caller file:///C:/Users/Саша/Desktop/Listalka.swf cannot access Stage owned by app:/Roditelsky.swf. at flash.display::Stage/requireOwnerPermissions() at flash.display::Stage/addEventListener() at Listalka_fla::MainTimeline/frame1()[Listalka_fla.MainTimeline::frame1:14] Попробуй, пожалуйста, разобраться. Может получится? На тебя только и надеюсь. У тебя огромный опыт и, самое главное, есть желание помогать людям! Последний раз редактировалось Comer; 13.04.2016 в 11:04. |
|
|||||
|
Мой главный совет был не переименовать файлы, а создать контекст загрузки. Это во-первых. Во-вторых, что толку от переименования файла, если у тебя в пути все равно содержатся руские буквы?
Третье: рабочий стол - это не директория приложения, и считается не безопасной для флешки. Чтобы что-то работало с рабочего стола, нужно указать ее как разрешенную здесь https://www.macromedia.com/support/d...manager04.html Но лучше сделай, чтобы обе флешки лежали в директории приложения, откуда они по умолчанию могут грузиться.
__________________
Ко мне можно и нужно обращаться на ты) |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|