Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как из загружаемой флешки отправить в событии ссылку на себя? (http://www.flasher.ru/forum/showthread.php?t=140969)

AlliAS 11.06.2010 20:54

Как из загружаемой флешки отправить в событии ссылку на себя?
 
Здравствуйте. Необходимо из загружаемой swf отправлять некое событие в котором передавать доступную для основной флешки (которая загружает первую) ссылку на саму же себя (загружаемую флешку). Как это правильно сделать? Пробовал через:
Код AS3:

this.dispatchEvent("evt", true) //в загружаемой, и
 
stage.addEventListener("evt", onEvt) //в основной

но до основной событие почему-то не "доплывает" (хотя отравляю и слушаю когда stage уже сущесвует (в Event.ADDED_TO_STAGE)),

потом пробовал создать собсвенное событие и отправляеть в нем ссылку как дополнительный параметр:
Код AS3:

package vpartner {
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class PartnerAnimationEvent extends Event{
 
                static public const ANIMATION_START:String = "animation_start";
                static public const ANIMATION_END:String = "animation_end";
 
                private var $animTarget:MovieClip;//ссылка
 
                public function PartnerAnimationEvent(type:String, animTarget:MovieClip, bubbles:Boolean = false) {
                        super(type, bubbles);
                        $animTarget = animTarget;
                }
 
                public function get animTarget():MovieClip { return $animTarget; }
 
        }
 
}

Отправляю его уже для stage (поскольку в этом случае событие доходит до внешней флешки, но что target, что currentTarget ссылкаються на Stage (сслыки нету))

Код AS3:

stage.dispatchEvent(new PartnerAnimationEvent(PartnerAnimationEvent.ANIMATION_END, this, true));//отправляю (из внутренней флешки)
 
stage.addEventListener(PartnerAnimationEvent.ANIMATION_END, onAnimEnd);//ловлю (во внешней)

В этом случае событие отлавливаеться но возникает совсем непонятная ошибка:
Код:

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать vpartner::PartnerAnimationEvent@ef345f1 в vpartner.PartnerAnimationEvent.
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.display::Stage/dispatchEvent()
        at vpartner.demo::AnimationBase/__whenEnterFrame()

Мучаюсь уже два дня, с этими попытками, подскажите пожалуйста как мне все-таки правильно передать ссылку?

chabapok 12.06.2010 19:03

чтобы событие доплывало, нужно, чтобы загруженная флешка была не просто загружена, а добавлена на stage основной флешки.

если вам этого не надо, так подписывайтесь на событие не на уровне stage, а на том уровне, в детях которого есть эта флешка. Например на уровне loader-а, которым вы его грузите

возможно еще там разрешить надо взаимный доступ через границы изолированной среды (точно уже не помню), тогда и события проходить будут. В основной и загружаемой флешкепишем Security.allowDomain("*"); и только после этого диспатичм эвенты.

Добавлено через 1 минуту
да, еслстественно, если вы подписались на событие у stage основной, то обьект который делает this.dispathcEvent() должен быть на экране, иначе событие не дойдет...

dimarik 12.06.2010 21:36

там еще sharedEvents есть

AlliAS 13.06.2010 03:43

Да вроде и с доступом (гружу с new LoaderContext(true, ApplicationDomain.currentDomain, SecurityDomain.currentDomain)), и с наличием на stage все в порядке (отправляю из обработчика Event.ADDED_TO_STAGE), но все-равно до stage доплывают, только если диспатчить события с него-же кстати, а что такое SharedEvents ?


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

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