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

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

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

Регистрация: Apr 2010
Сообщений: 137
По умолчанию Ошибка при загрузке swf

Добавляю флешку в флешку (через Loader), всё отлично проходит. При этом я брал какую-то случайно попавшуюся флешку для загрузки. Но если взять флешку именно с моей игрой, то вылазит ошибка Cannot access a property or method of a null object reference. Вылазит она именно тогда, когда флешку нужно показать (на addChild скорее всего), а загружается всё предыдущее время она нормально. Искал проблему в интернете, на зарубежных сайтах тоже смотрел, нашел только единственный совет, который я понял - добавить пустой кадр игре. Не помогло.

Старый 13.01.2013, 20:54
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Без кода не помогут. Скорее всего идет обращение к stage, которого на момент инициализации конструктора документ класса загружаемой флешки просто нет.
__________________
тут я

Старый 14.01.2013, 00:55
TurboDizel вне форума Посмотреть профиль Отправить личное сообщение для TurboDizel Найти все сообщения от TurboDizel
  № 3  
Ответить с цитированием
TurboDizel
 
Аватар для TurboDizel

Регистрация: Apr 2010
Сообщений: 137
Цитата:
Сообщение от КорДум Посмотреть сообщение
Без кода не помогут. Скорее всего идет обращение к stage, которого на момент инициализации конструктора документ класса загружаемой флешки просто нет.
Тогда событие ADDED_TO_STAGE? Просто с ним тоже самое выдает:
Код AS3:
//импорты
 
public class main extends MovieClip {
//переменные
   public function main() {
   addEventListener(Event.ADDED_TO_STAGE, mains);
   }
 
	private function mains(e:Event):void {
           //тут пошла игра
        }
}
Флешка, которая загружает:
Код AS3:
 
public class preloader extends MovieClip {
public function preloader() 
{
	addChild(Load_perc);
	Load_perc.x = 310;
	Load_perc.y = 520;
	var req:URLRequest = new URLRequest("main.swf");
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, timerforgame);
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, prog);
	loader.load(req);
}
 
function prog(e:ProgressEvent):void {
   loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, prog);
   Load_perc.load_text.text = int((e.bytesLoaded / e.bytesTotal) * 100);
}
 
function timerforgame(e:TimerEvent):void {
   timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerforgame);
   removeChild(Load_perc);
   addChild(loader);
}
}

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Стек ошибки полностью? Может она в подгружаемой?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Apr 2010
Сообщений: 137
Цитата:
Сообщение от GBee Посмотреть сообщение
Стек ошибки полностью? Может она в подгружаемой?
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at main$iinit()

Если вместо моей флешки main вставить какую-то другую, то всё норм работает.

Старый 14.01.2013, 08:51
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Названо все не по конвенции, не сразу сообразил, что main - класс. Дайте код iinit()
__________________
тут я

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

Регистрация: Apr 2010
Сообщений: 137
Цитата:
Сообщение от КорДум Посмотреть сообщение
Названо все не по конвенции, не сразу сообразил, что main - класс. Дайте код iinit()
Когда попросили код функции iinit, я сразу вспомнил, что такой функции у меня нет вообще. На всякий случай проверил по кодам всё, на самом деле такой нет, ни функции ни её вызова. Решил просто попробовать добавить функцию iinit в загружаемую флеху (main называется) и вот, заработало. Функция пустая ничего не делает, и после того как я её убрал, всё дальше стало работать. Мистика какая-то, будто в какой-то кеш куда-то что-то сохранилось, и теперь эта функция iinit там лежит всегда. И зачем она вообще компилятору нужна?
Потом взял ещё одну свою флеху (называется Menu, но переименовываю потом в main), сделал с ней тоже самое, но вот она уже не работает (та же ошибка).
Ещё кстати с флехой main: если на компе запускать, то норм всё работает, в интернете уже не работает. Скорее всего та же ошибка, там её не показывает просто. Думал может Security.allowDomain("*") поможет, но не помог.

Старый 14.01.2013, 20:13
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 8  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от TurboDizel Посмотреть сообщение
Потом взял ещё одну свою флеху (называется Menu, но переименовываю потом в main), сделал с ней тоже самое, но вот она уже не работает (та же ошибка).
__________________
adobe AS3 manual

Старый 16.01.2013, 00:46
namespaces вне форума Посмотреть профиль Отправить личное сообщение для namespaces Найти все сообщения от namespaces
  № 9  
Ответить с цитированием
namespaces
 
Аватар для namespaces

Регистрация: Jan 2013
Сообщений: 126
Цитата:
Сообщение от TurboDizel Посмотреть сообщение
Код AS3:
//импорты
 
public class main extends MovieClip {
//переменные
   public function main() {
   addEventListener(Event.ADDED_TO_STAGE, mains);
   }
 
	private function mains(e:Event):void {
           //тут пошла игра
        }
}

Код AS3:
public class Main extends Sprite
	{
		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);
                        //тут пошла игра
 
		}
 
	}

Старый 16.01.2013, 01:12
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от namespaces Посмотреть сообщение
Код AS3:
public class Main extends Sprite
	{
		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);
                        //тут пошла игра
 
		}
 
	}
Фу, как грубо и непрактично! И чой-то у вас конструктор стал что-то возвращать. Это как в -ться ненароком ошибиться. Вроде все понимают, но как-то неудобно среди людей получается.
От как надо!
Код AS3:
public class Main extends Sprite
{
    public function Main() {
        super();
        super.addEventListener(Event.ADDED_TO_STAGE, this.init);
    }
 
    private function init(event:Event):void {
        super.removeEventListener(event.type, arguments.callee);
        //тут пошла игра
    }
}
Добавлено через 17 минут
Ах, да, при таком способе инициализации
Код AS3:
trace(super.loaderInfo.width);
И некоторые другие его свойства выдадут вам
Код:
Error: Error #2099: Загружаемый объект не настолько загрузился, 
чтобы можно было получить эту информацию.
Потому предлагаю делать

Код AS3:
public function Main() {
    super();
    if (super.stage) // Primary Document Class recieve the Stage in the constructor
        super.addEventListener(Event.COMPLETE, this.init);
    else // Loadee Document Class
        super.addEventListener(Event.ADDED_TO_STAGE, this.init);
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 16.01.2013 в 01:32.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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