|
|
|||||
Регистрация: Jul 2012
Сообщений: 112
|
размещение элементов по сетке. stage = null
код линии времени
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"); 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() Последний раз редактировалось iNils; 11.07.2012 в 01:11. |
|
|||||
Регистрация: Jul 2012
Сообщений: 112
|
как я понял stage в этот момент = null и поэтому я не могу к нему обратиться. Но тогда вопрос в том, как его сделать не null. нашел вот, что addEventListener(Event.ADDED_TO_STAGE, моя функция); но так не работает тоже, т. к. эта функция отслеживает уже другое событие. ЧТо делать?
|
|
|||||
Цитата:
Она все правильно отслеживает. Если совсем уж не верится, можно сделать такую проверку: if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); function init(e:Event = null):void { // тут stage уже будет 100% доступен } |
|
|||||
Регистрация: Jul 2012
Сообщений: 112
|
Цитата:
функция init не запускается и stage = null Последний раз редактировалось olejan1991; 11.07.2012 в 00:09. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Вы, похоже, лезете в 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. |
|
|||||
Регистрация: Jul 2012
Сообщений: 112
|
т. е. если я буду добавлять в root с помощью appendChild, то все добавится?
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Как это вообще связано с тем, что я написал? Да, написал много и путано %) Но вообще-то это основы (только Event.ADDED_TO_STAGE чуток не основы).
Вот себе ответьте - есть вот stage, почему она не null, когда вы её используете? И как вы будете добавлять не на stage и root (не всё же в одно место складывать)? Кстати, ответ на ваш вопрос можно (и гораздо быстрее) получить самому, попробовав.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
Часовой пояс GMT +4, время: 02:11. |
|
« Предыдущая тема | Следующая тема » |
|
|