Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Возникает ошибка в методе внешнего swf-файла при его загрузке в другой swf-файл (http://www.flasher.ru/forum/showthread.php?t=132611)

Furinax 16.11.2009 17:14

Возникает ошибка в методе внешнего swf-файла при его загрузке в другой swf-файл
 
Здравствуйте все кто хочет помочь.
Попробую описать проблему поподробнее.
У меня есть два swf-файла:первый (полностью рабочий) и второй для загрузки первого.
Второй swf-файл содержит кнопку, по нажатию на которую должен загружаться первый. Но в результате почему-то вместо загрузки происходит следующая ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at game.mainparts::WorldMap/addWorldMapGraphics()
at game.mainparts::WorldMap()
Из описания можно сделать вывод: что возникает ошибка при вызове метода (данный метод вызывается в конструкторе и выполняется при запуске swf-файла) загружаемого swf-файла.
Но если запустить загружаемый файл, то он никаких ошибок не вызывает.
Вот код swf-файла для загрузки:
Код AS3:

private function addWorldMap (e:MouseEvent) {
        var urlReq1:URLRequest = new URLRequest("WorldMap.swf");
        worldMapLoader = new Loader();
        worldMapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, worldMapLoaded);
        worldMapLoader.load(urlReq1);
};

А вот код метода загружаемого swf-файла, который вызывает ошибку:
Код AS3:

private function addWorldMapGraphics() {
        var worldMapSubstrate:WorldMapSubstrate = new WorldMapSubstrate;
        worldMapSubstrate.x = stage.width/2 - worldMapSubstrate.width/2;
        worldMapSubstrate.y = stage.height/2 - worldMapSubstrate.height/2;
        worldMapPartGraphics = new WorldMapGraphics();
        worldMapPartGraphics.x = stage.width/2 - worldMapPartGraphics.width/2;
        worldMapPartGraphics.y = stage.height/2 - worldMapPartGraphics.height/2;
        startingCoordinates = new Array;
        startingCoordinates[0] = stage.width/2 - worldMapPartGraphics.width/2;
        startingCoordinates[1] = stage.height/2 - worldMapPartGraphics.height/2;
        addChild(worldMapPartGraphics);
        addChild(worldMapSubstrate);
};

Помогите пожалуйсто разобраться в чем ошибка и как её устранить.У самого просто никаких идей на этот счет, вроде бы код простой...

Kuruki 16.11.2009 17:27

Скорее всего загужаемый свиф еще не добавлен на сцену, поэтому его stage = null.

Furinax 16.11.2009 17:40

А разве он не должен ссылаться на свою сцену(сцена обведена линиями по ширине и высоте)? Или же он ссылается на сцену swf-файла загрузчика? Но и её я обвел линиями. Есть еще какие идеи и советы как с этим бороться?

AS3Coder 16.11.2009 18:19

Kuruki прав. worldMapLoader нужно добавить в область отображаемых объектов.
Код AS3:

private function addWorldMap (e:MouseEvent) {
        var urlReq1:URLRequest = new URLRequest("WorldMap.swf");
        worldMapLoader = new Loader();
        worldMapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, worldMapLoaded);
        worldMapLoader.load(urlReq1);
        addChild(worldMapLoader);
};


Kuruki 16.11.2009 19:45

Сцена у всех одна. И обводить ее линиями необязательно :)

Furinax 16.11.2009 23:21

Если вы не заметили, то формула расчета координат объекта worldMap работает таким образом, что с учетом ширины и высоты сцены она выравнивает мувиклип по центру экрана в зависимости его собственных ширины и длины. Если же вначале на сцене ничего нету, то вне зависимости от параметров сцены заданных в properties fla-файла она будет считаться равной нулю. Если не верите, то пропишите trace(stage.width) или trace(stage.height) и в обоих случаях получите нули. ПОЭТОМУ я вначале и обвел сцену по нужным мне размерам в обоих swf-файлах.

А причем тут вообще addChild()? Я пишу, что swf-файл не выполняет все свои методы до конца при загрузке в другой swf-файл. И никакой тут addChild() ни при чем (тем более что я проверил до того как задать здесь вопрос).

Так вот если сцена у всех одна, то тем более если на ней что то есть (в моем случае она обведенна) она не может быть равна нулю.

И как я уже написал, в отдельности первый swf-файл полнотью работает как надо и выполняет все свои методы. А при загрузке в другой swf-файл нет.

Если кто-нибудь еще сталкивался с такой проблемой, напишите пожалуйсто какое вы применили решение.

Kuruki 16.11.2009 23:43

Используйте stage.stageWidth, stageHeight.

swf-файл не выполняет все свои методы до конца потомучто происходит ошибка. До тех пор, пока клип не добавлен на сцену (в список отображения), его свойство stage равно null. При попытке обратиться к null происходит вышенаписанная вами ошибка.

А в отдельности работает, потомучто он автоматом на сцену добавляются

Furinax 16.11.2009 23:47

Вот это, на мой взгляд, более дельный совет(странно что сам до него не додумался). Завтра когда буду на работе попытаюсь переписать класс, надеюсь тогда заработает. О результатах обязательно отпишусь.

Kuruki 16.11.2009 23:53

Так я то же самое написал, только более подробно может.
Или вы про stage.stageWidth, stageHeight? Это не избавит вас от ошибки! Они лишь правильно скажут размеры сцены без всяких линий.
Вам нужно добавить swf в список отображения, прежде, чем обращаться из него к stage. Обычно это делается методом addChild.

Furinax 17.11.2009 13:12

Да, stage.stageWidth и stage.stageHeight действительно не помогают, только что испробовал.
Но и addChild(worldMapLoader) не помогает ни в каком месте: ни до вызова метода load(), ни после, ни до событий Event.COMPLETE или Event.INIT в приемниках, ни после...
Я уже выше писал, что уже десять раз addChild() испробовал прежде чем создать тему. Если бы было все так просто я бы тут спрашивать не стал.


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

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