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

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

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

Регистрация: Jul 2012
Сообщений: 112
По умолчанию размещение элементов по сетке. stage = null

код линии времени
Код AS3:
import mvc.Model;
import mvc.View;
import flash.events.Event;
 
var model:Model = new Model();
var square:Square = new Square();
var view:View = new View();
 
view.model = model;
view.square = square;
model.load("xml/settings.xml");
из которого вызывается класс View
Код AS3:
package mvc
{
	import flash.text.TextField;
	import flash.events.Event;
	import Square;
	import flash.display.Stage;
 
	public class View
	{
		private var numbSquare:Number;
 
		private var _model:Model;
 
		private var _square:Square;
 
		private var stage:Stage;
 
		public function View(){
 
		}
 
		public function set square(s:Square){
			_square = s;
			_square.addEventListener(Model.MODEL_CHANGED, update);
		}
 
		public function get square():Square{
			return _square;
		}
 
		public function set model(m:Model):void
		{			
			_model = m;
			_model.addEventListener(Model.MODEL_CHANGED, update);
		}
 
		private function update(e:Event):void{			
			numbSquare = Number(_model.numbSquare);
			for(var i:int = 0; i < numbSquare; i++){
				//trace(_square);
				//var square:Square = new Square();
				stage.addChild(_square); // здесь добавляется элементы класса Square
			}			
		}
 
		public function get model():Model{
			return _model;
		}
 
	}
 
}
Данный элемент
По идее должны создаваться элементы класса Square, но они не создаются. В чем проблема?
Код:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
	at mvc::View/update()
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at mvc::Model/setSquare()
	at mvc::Model/xmlLoaded()
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at flash.net::URLLoader/onComplete()
Миниатюры
Нажмите на изображение для увеличения
Название: класс.jpg
Просмотров: 19
Размер:	48.4 Кб
ID:	28190  


Последний раз редактировалось iNils; 11.07.2012 в 01:11.
Старый 10.07.2012, 22:07
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 2  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
как я понял stage в этот момент = null и поэтому я не могу к нему обратиться. Но тогда вопрос в том, как его сделать не null. нашел вот, что addEventListener(Event.ADDED_TO_STAGE, моя функция); но так не работает тоже, т. к. эта функция отслеживает уже другое событие. ЧТо делать?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
т. к. эта функция отслеживает уже другое событие. ЧТо делать?
Какое еще другое событие?

Она все правильно отслеживает. Если совсем уж не верится, можно сделать такую проверку:
Код AS3:
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
 
function init(e:Event = null):void {
   // тут stage уже будет 100% доступен
}
Ну а в функцию update() добавить проверку:

Код AS3:
private function update(e:Event):void{	
 if (!stage) return;		
			numbSquare = Number(_model.numbSquare);
			for(var i:int = 0; i < numbSquare; i++){
				//trace(_square);
				//var square:Square = new Square();
				stage.addChild(_square); // здесь добавляется элементы класса Square
			}			
		}

Старый 10.07.2012, 22:55
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 4  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
Цитата:
Какое еще другое событие?
_model.addEventListener(Model.MODEL_CHANGED, update);

Цитата:
Она все правильно отслеживает. Если совсем уж не верится, можно сделать такую проверку:
Код AS3:
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
 
function init(e:Event = null):void
		{
			trace("ss");
		}
функция init не запускается и stage = null


Последний раз редактировалось olejan1991; 11.07.2012 в 00:09.
Старый 11.07.2012, 00:43
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Вы, похоже, лезете в MVC, не понимая основ собственно флэш. Всё, что вы видите, является, в конечном итоге, DisplayObject. stage - это тоже DisplayObject, но в него добавлять не принято, принято добавлять в root (ну и потом в то, что добавлено в root итд.). root - это Document Class (вот не пишите вообще на линии времени, пишите в Document Class, должно быть практически то же самое, но чище). У (любого) DisplayObject есть поля stage и root. Но они появляются (т.е. становятся не null) только когда DisplayObject добавляют в список отображения (автоматом, как root (хотя если вашу флэшку будет грузить другая флэшка, то автомата не будет) или при помощи addChild итп.). Вот собсно Event.ADDED_TO_STAGE шлётся DisplayObjectом, когда его добавляют.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 11.07.2012 в 01:46.
Старый 11.07.2012, 01:01
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 6  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
т. е. если я буду добавлять в root с помощью appendChild, то все добавится?

Старый 11.07.2012, 01:48
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Как это вообще связано с тем, что я написал? Да, написал много и путано %) Но вообще-то это основы (только Event.ADDED_TO_STAGE чуток не основы).
Вот себе ответьте - есть вот stage, почему она не null, когда вы её используете?
И как вы будете добавлять не на stage и root (не всё же в одно место складывать)?
Кстати, ответ на ваш вопрос можно (и гораздо быстрее) получить самому, попробовав.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

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

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


 


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


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