Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.11.2009, 17:14
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 1  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Question Возникает ошибка в методе внешнего 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);
};
Помогите пожалуйсто разобраться в чем ошибка и как её устранить.У самого просто никаких идей на этот счет, вроде бы код простой...

Старый 16.11.2009, 17:27
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 2  
Ответить с цитированием
Kuruki

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

Старый 16.11.2009, 17:40
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 3  
Ответить с цитированием
Furinax
[+1 02.09.15]

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

Старый 16.11.2009, 18:19
AS3Coder вне форума Посмотреть профиль Отправить личное сообщение для AS3Coder Найти все сообщения от AS3Coder
  № 4  
Ответить с цитированием
AS3Coder
 
Аватар для AS3Coder

Регистрация: Oct 2009
Адрес: г. Казань
Сообщений: 82
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);
};

Старый 16.11.2009, 19:45
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 5  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Сцена у всех одна. И обводить ее линиями необязательно

Старый 16.11.2009, 23:21
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 6  
Ответить с цитированием
Furinax
[+1 02.09.15]

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

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

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

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

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

Старый 16.11.2009, 23:43
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 7  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Используйте stage.stageWidth, stageHeight.

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

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

Старый 16.11.2009, 23:47
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 8  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Вот это, на мой взгляд, более дельный совет(странно что сам до него не додумался). Завтра когда буду на работе попытаюсь переписать класс, надеюсь тогда заработает. О результатах обязательно отпишусь.

Старый 16.11.2009, 23:53
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 9  
Ответить с цитированием
Kuruki

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

Старый 17.11.2009, 13:12
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 10  
Ответить с цитированием
Furinax
[+1 02.09.15]

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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