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

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

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

Регистрация: Jun 2013
Сообщений: 33
По умолчанию Ошибка 1009 при подгрузке SWF

Подскажите в чём может быть проблема?
Есть такой прелоадер:

Код AS3:
package
{
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.LocalConnection;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.system.Security;
	import flash.system.SecurityDomain;
 
	public class Preload extends MovieClip
	{
		public function Preload()
		{
 
			this.addEventListener(Event.ADDED_TO_STAGE, onStage);
 
			function onStage(e:Event) {
			var preloader:Loader = new Loader();
			var request:URLRequest = new URLRequest('game.swf');
			preloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onccCompl);
			preloader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgr);
			preloader.load(request);	
			}
		}
 
		private function onProgr(e:ProgressEvent) {
			var bLoad:int = e.bytesLoaded;
			var bTotal:int = e.bytesTotal;
			textWin.text = String(bLoad/bTotal*100);
		}
		private function onccCompl(e:Event) {
			trace('ok');
			var mc:MovieClip=e.target.content as MovieClip;
			addChild(mc);
		}
	}
}

Проценты бегут, но при завершении флешка не добавляется на сцену.
Пробовал и SecurityDomain и по ADDED_TO_STAGE. Вылетает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Game()

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Game()
Ошибка возникает в классе Game.
Туда и надо смотреть.

Старый 11.08.2013, 19:51
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 3  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
Без прелоадера работает.
Может что-то с FlashVars?

Старый 11.08.2013, 20:08
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 4  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
А Вы там к stage не обращаетесь?

Старый 11.08.2013, 21:15
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Без прелоадера работает.
Может что-то с FlashVars?
А при компиляции разве не указывается, в какой строке ошибка?
Покажите код Game.

Старый 11.08.2013, 21:19
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 6  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
Цитата:
Сообщение от belv Посмотреть сообщение
А Вы там к stage не обращаетесь?
Обращаюсь.

Старый 11.08.2013, 22:18
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 7  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Ну вот Вам и ошибка, потому что, когда Вы загружаете 1 swf во 2, в загружаемом нет свойства stage.Можно будет обратится к stage, когда она будет уже добавлена в список отображения.Я думаю, что именно по этой причине во flash develop по умолчанию создается такая структура.
Код AS3:
	public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
        removeEventListener(Event.ADDED_TO_STAGE, init);
			// тут начинается выполнение программы, а не а конструкторе.
		}
Может я и ошибаюсь, на мой взгляд самое логичное объяснение.


Последний раз редактировалось belv; 11.08.2013 в 23:07.
Старый 12.08.2013, 01:11
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
На самом деле, путаница в обработке событий.
Автор кода думает, что e.target в функции onccCompl это loader, но на самом деле это loader.contentLoaderInfo (см. на подписку на событие Event.COMPLETE).

Самое простое - вынести лоадер в приватные переменные класса и брать контент из него.

Старый 12.08.2013, 01:35
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 9  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Вы попробуйте загрузить так как автор и Вы увидите, что все работает.
А ошибку генерирует загружаемая флешка.Компилятор говорит, что нет какого-то свойства.Это свойство stage, я больше чем уверен.
Попробуйте в загружаемую swf прописать, trace(stage.stageWidth); и Вы увидите эту же ошибку.

Старый 12.08.2013, 11:14
alexqw вне форума Посмотреть профиль Отправить личное сообщение для alexqw Найти все сообщения от alexqw
  № 10  
Ответить с цитированием
alexqw

Регистрация: Jun 2013
Сообщений: 33
Цитата:
Сообщение от belv Посмотреть сообщение
Ну вот Вам и ошибка, потому что, когда Вы загружаете 1 swf во 2, в загружаемом нет свойства stage.Можно будет обратится к stage, когда она будет уже добавлена в список отображения.Я думаю, что именно по этой причине во flash develop по умолчанию создается такая структура.
Код AS3:
	public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
        removeEventListener(Event.ADDED_TO_STAGE, init);
			// тут начинается выполнение программы, а не а конструкторе.
		}
Может я и ошибаюсь, на мой взгляд самое логичное объяснение.


Спасибо большое!!!
Так работает.

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

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

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


 


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


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