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

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

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

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
По умолчанию Выскакивает Error #1009 по непонятным причинам.

Добрый день дамы и господа. Помогите пожалуйста разрешить мне маленькую проблемку. Я в АС3 новичёк, поэтому возможна моя беда вам покажется смешной, однако я уже отсчялся совсем, и пришел к вам за помощью. Значит так:

Флешка, представляет собой следующее:

В рут из библиотеки добавляется клим Welcom, в котором создается CheckBox и Button. По нажатию на кнопку, положение CheckBox.selected записывается в SharedObject, клип удаляется и добавляется другой. При повторном запуске, если чек бокс был выставлен, то сразу вызывается метод, который происходил по нажатию кнопки, после записи в Shared object, и выполнение метода прерывается. Так вот если чек бокс небыл выставлен, то все работает отлично, но если был, то выскакивает ошибка:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

В методе skipWelcome(), parent ровняется null, однако this как и нужно = welcome. В чем проблема расскажите пожалуйста.

Собственно код, главный её класс:

Код AS3:
package com.flashgangsta {
 
	import flash.display.MovieClip;
	import flash.display.Sprite;
 
	public class Main extends Sprite {
 
		private var welcome:MovieClip;
 
		public function Main() {
			var welcome:MovieClip = new Welcome();
			addChild(welcome);
		}
	}
}
Класс Welcome:

Код AS3:
package com.flashgangsta {
 
	import flash.display.MovieClip;
	import fl.controls.Button;
	import fl.controls.CheckBox;
	import flash.net.SharedObject;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Welcome extends MovieClip {
 
		private var skip:Button = new Button();
		private var dontShowAgain:CheckBox = new CheckBox();
		private var sharedObject:SharedObject = SharedObject.getLocal("skipWelcom");
 
		public function Welcome() {
			if(sharedObject.data.dontShowAgain) {
				skipWelcome(); // Вот тут возникает ошибка
				return;
			}
			dontShowAgain.label = "Не показывать в следующий раз";
			dontShowAgain.width = 202;
			dontShowAgain.selected = false;
			dontShowAgain.x = 300;
			dontShowAgain.y = 505;
			dontShowAgain.useHandCursor = true;
			addChild(dontShowAgain);
 
			skip.label = "Пропустить заставку"
			skip.width = 190;
			skip.x = 305;
			skip.y = 533;
			skip.useHandCursor = true;
			addChild(skip);
 
			skip.addEventListener(MouseEvent.CLICK, onSkipClicked);
 
			this.addEventListener(Event.ENTER_FRAME, checkMoviePlayingProgress);
		}
 
		private function onSkipClicked(event:Object):void {
			recordSharedObject();
			skip.removeEventListener(MouseEvent.CLICK, onSkipClicked);
			skipWelcome();
		}
 
		private function recordSharedObject():void {
			sharedObject.data.dontShowAgain = dontShowAgain.selected;
			sharedObject.flush();
		}
 
		private function skipWelcome():void {
			parent.addChild(new EastingStartMenu()); //parent = null
			parent.removeChild(this); //parent = null
		}
	}
}
Прилогаю исходник, там кода немного больше, для простоты я удалил ненужное тут.
Вложения
Тип файла: rar Easting.rar (391.7 Кб, 34 просмотров)
__________________
Убейте меня!


Последний раз редактировалось джонатан; 13.06.2010 в 22:14.
Старый 13.06.2010, 22:17
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Вы обращаетесь к parent, еще в конструкторе, т.е. до добавления Welcom в Main.


Последний раз редактировалось udaaff; 13.06.2010 в 22:22.
Старый 13.06.2010, 22:20
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 3  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Код AS3:
 package com.flashgangsta {
	import flash.display.MovieClip;
	import fl.controls.Button;
	import fl.controls.CheckBox;
	import flash.net.SharedObject;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Welcome extends MovieClip {
 
		private var skip:Button = new Button();
		private var dontShowAgain:CheckBox = new CheckBox();
		private var sharedObject:SharedObject = SharedObject.getLocal("skipWelcom");
 
 
public function Welcome() 
{
     if (stage) init();
     else addEventlistener(Event.ADDED_TO_STAGE,init);
}
private function init(event:Event=null):void
{
     removeEventListener(Event.ADDED_TO_STAGE,init);
     if(sharedObject.data.dontShowAgain) {
				skipWelcome(); 
				return;
			}
			dontShowAgain.label = "Не показывать в следующий раз";
			dontShowAgain.width = 202;
			dontShowAgain.selected = false;
			dontShowAgain.x = 300;
			dontShowAgain.y = 505;
			dontShowAgain.useHandCursor = true;
			addChild(dontShowAgain);
 
			skip.label = "Пропустить заставку"
			skip.width = 190;
			skip.x = 305;
			skip.y = 533;
			skip.useHandCursor = true;
			addChild(skip);
 
			skip.addEventListener(MouseEvent.CLICK, onSkipClicked);
 
			this.addEventListener(Event.ENTER_FRAME,         checkMoviePlayingProgress);
}
 
private function onSkipClicked(event:Object):void {
			recordSharedObject();
			skip.removeEventListener(MouseEvent.CLICK, onSkipClicked);
			skipWelcome();
		}
 
		private function recordSharedObject():void {
			sharedObject.data.dontShowAgain = dontShowAgain.selected;
			sharedObject.flush();
		}
 
		private function skipWelcome():void {
			parent.addChild(new EastingStartMenu()); 
			parent.removeChild(this);
		}
	}
}


Последний раз редактировалось easy.proger; 13.06.2010 в 22:26. Причина: очепятки
Старый 13.06.2010, 22:22
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 4  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
Вы имеетее ввиду который находится на stage? Так ведь welcom на нем находится, он добавляется из главного класса:

Код AS3:
 
public function Main() {
	var welcome:MovieClip = new Welcome();
	addChild(welcome);
}
А проверка происходит уже в его конструкторе (Welcome).


Update:

easy.proger, спасибо большое, все заработало, теперь я понял в чем беда была, буду иметь ввиду.

З.Ы. если вдруг наглянет администрация, возьмите на заметку, что в новой опере, невозможно не редактировать сообщение, не пользоваться кнопками вставки тегов в панели при создании топика или мессаги.

Всем спасибо!
__________________
Убейте меня!


Последний раз редактировалось джонатан; 13.06.2010 в 22:31.
Старый 13.06.2010, 22:33
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 5  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Интересно, а какой по вашему должен быть парент у объекта которого нет на сцене ? или вы считаете, что добавление на сцену происходит телепатически ? Давайте проанализируем ваш код

Вы создаете объект var welcome:MovieClip = new Welcome(); при этом входите в конструктор, но ведь addChild(welcome) еще не был вызван и нас нету на сцене ! и тут же мы спрашиваем у себя кто парент, ну и кто может быть парентом у объекта которого еще нету на сцене ? конечно null, поэтому я привел код в котором мы ждем пока нас добавят на сцену после чего уже нам будет доступно и stage и parent …


Последний раз редактировалось easy.proger; 13.06.2010 в 22:37.
Старый 13.06.2010, 22:57
джонатан вне форума Посмотреть профиль Отправить личное сообщение для джонатан Найти все сообщения от джонатан
  № 6  
Ответить с цитированием
джонатан
 
Аватар для джонатан

Регистрация: Jan 2007
Адрес: Минск
Сообщений: 781
Отправить сообщение для джонатан с помощью Skype™
easy.proger, то что я писал до апдейта я не вам, после вашего примера я все понял, почему то мне не пришло в голову что конструктор выполняется после создания экземпляра класса, а казалось, что именно после того как он будет добавлен на стейдж. Извеняю, действительно глупо, и очень благодарю за помощь.
__________________
Убейте меня!

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

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

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


 


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


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