PDA

Просмотр полной версии : скрипт подгружаемой SWF-ки не выполняется


erectus
11.01.2011, 19:40
доброго времени суток.
я столкнулся со странной проблемой с загружаемой SWF-кой.
при создании анимации в последний кадр вставлен скрипт:
trace("stop");
dispatchEvent(new Event("anim_stop"));
жмем F12 и видим, что всё работет номально: трейсы выводятся.
загружаем полученную SWF-ку в другое флеш-приложение (Loader-ом), добавляем на сцену и, опять-таки, видим, что всё работает как надо: трейсы выводятся, эвенты отправляются.
затем сцене, содержащей анимацию присваиваем собственное имя класса (по умолчанию ему присваивается имя MainTimeline). жмем F12, и всё вроде продолжает работь... но если загрузить эту новую SWF-ку тем же лоадером, то уже ничего не работает: трейсы не пишутся, события не генерируются... внутренний скрипт просто игнорируется.
подскажите в чем проблема?

dimarik
12.01.2011, 00:11
Не напомните, как сцене присвоить имя класса?

erectus
12.01.2011, 01:44
Не напомните, как сцене присвоить имя класса?

хм.... в данный момент нету флеша под рукой...
ну нашел вот картинку на просторах интернета =)..... я имел ввиду то, что на картинке (http://multimedia.journalism.berkeley.edu/media/upload/tutorials/flash/Flash-workspace-cs3.jpg) подписано как DocumentClass (снизу)

mayakwd
12.01.2011, 06:03
MainTimeline это root

cleptoman
12.01.2011, 10:22
блин, ну все же поняли о чем речь )) (про сцену и класс)

по сути:
возможно при прописывании документ класса полезли какиенить эксепшны. проверьте, не лезут ли ошибки вашей SWF с документ классом.

erectus
12.01.2011, 13:26
возможно при прописывании документ класса полезли какиенить эксепшны. проверьте, не лезут ли ошибки вашей SWF с документ классом.
проверял, нет там никаких эксепшенов... их было бы видно сразу

еще не уточнил: я не создавал никакого специального класса, просо в поле DocumentClass прописал название (произвольное) (мне посто нужно, чтобы классы root-овых объектов подгружаемых SWF-ок были уникальны)

cleptoman
12.01.2011, 13:31
ну это вы зря.)

для того, чтобы ваша свф слала события, то ваш документ класс нужно как минимум унаследовать от EventDispatcher ..может по этому и не работает. сейчас ваш документ класс создается автоматом и наследуется от Object, что не есть гуд. создайте класс, наследник от мувиклипа, если вас не устраивает MainTimeline.

erectus
12.01.2011, 13:55
спасибо, попробую... хотя я был уверен, что он наследуется как минимум от MainTimeline

etc
12.01.2011, 14:33
Возможно конфликт классов основного и загружаемого swf. Правда, насколько я помню, для каждой swf создается свой пакет для MainTimeline.

cleptoman
12.01.2011, 14:57
хотя я был уверен, что он наследуется как минимум от MainTimeline
хмм..действительно не от Object


написал от балды в документклассе, не создавая AS файла:
import flash.utils.getQualifiedSuperclassName;
trace(this); // [object SomeClass]
trace(getQualifiedSuperclassName(this)); // flash.display::MovieClip

Добавлено через 7 минут
Возможно конфликт классов основного и загружаемого swf. Правда, насколько я помню, для каждой swf создается свой пакет для MainTimeline.
затестил.
с пустым полем документ класса:
trace(getQualifiedClassName(this)); // Untitled_fla::MainTimeline // создает пакет
с непустым полем, но без AS файла:
trace(getQualifiedClassName(this)); // SomeClass // не создает пакет

тады мабудь и конфликт.

erectus
12.01.2011, 17:16
помогло наследование от MovieClip-а.
проблема, видимо, была в том, что при задании собственного имени класса, флеш "забывает" воткнуть некоторые классы. У меня он не смог найти Event ("Call to possibly undefined type Event").
Добавил в AS-файлimport flash.events.Event; и всё заработало :yahoo:... всем спасибо!