Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не срабатывает событие ADDED_TO_STAGE (http://www.flasher.ru/forum/showthread.php?t=182063)

olejan1991 11.07.2012 00:17

не срабатывает событие ADDED_TO_STAGE
 
почему не срабатывает trace?
Код AS3:

package mvc
{
        import flash.text.TextField;
        import flash.events.EventDispatcher;
        import flash.events.Event;
        import flash.display.Stage;
 
        public class View extends EventDispatcher
        {
                private var stage:Stage;
 
                public function View()
                {
                        if(!stage){
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }                       
                }
 
                private function init(e:Event):void
                {
                        trace("ss");
                }               
 
        }
 
}


КорДум 11.07.2012 00:21

Потому что это событие не наступит никогда, так как объект не визуальный.

olejan1991 11.07.2012 00:23

а как определить тогда,что сцена имеет значение не null?

СлаваRa 11.07.2012 00:40

Так оно у вас по умолчанию null. Но значение никогда не "появится", следовательно слушатель не сработает.

strangedk 11.07.2012 00:41

сделайте extend Sprite, и уберите знак восклицания в условии

Wolsh 11.07.2012 00:43

Цитата:

а как определить тогда,что сцена имеет значение не null?
Зачем, если она всегда будет null?
У Вас объект не дисплейный. Он никогда не будет добавлен в Список отображения ("на стейдж").
Цитата:

и уберите знак восклицания в условии
Эмм...?

olejan1991 11.07.2012 00:44

Блин, но а как мне из класса создать элемент

Вот я пытаюсь, но мне понятное дело выдает ошибку
Код AS3:

package mvc
{
        import flash.text.TextField;
        import flash.events.EventDispatcher;
        import flash.events.Event;
        import flash.display.Stage;
 
        public class View extends EventDispatcher
        {
                private var numbSquare:Number;
 
                private var _model:Model;
 
                private var stage:Stage;
 
                public function View()
                {
                        if(!stage){
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }                       
                }
 
                private function init(e:Event):void
                {
                        trace("ss");
                }
 
                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(i);
                                var square:Square = new Square();
                                stage.addChild(square)
                        }
                }
 
                public function get model():Model
                {
                        return _model;
                }
 
        }
 
}

Код AS3:

import mvc.Model;
import mvc.View;
import flash.events.Event;
 
var model:Model = new Model();
var view:View = new View();
 
view.model = model;
 
model.load("xml/settings.xml");

а ошибка такая:


Код:

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()

в общем о том, что сцена null и что придумать я не могу понять

Wolsh 11.07.2012 00:49

Вам уже ответили.
Цитата:

Сообщение от strangedk (Сообщение 1088156)
сделайте extend Sprite


olejan1991 11.07.2012 00:55

Да нет, это не подойдет: он уже наследуется от EventDispatcher и это не DocumentClass чтоб его от Sprite наследовать

Wolsh 11.07.2012 01:51

Вам бы почитать что-нибудь.. Хотя бы справку..
Вам объяснили уже всё: почему нет события, что нужно сделать и почему именно это.
Вы ждете событие "меня добавили на стейдж" от объекта, который по природе своей никогда не сможет быть добавлен на стейдж — для этого он должен наследовать DisplayObject.
EventDispatcher не является наследником DisplayObject, и никогда не будет добавлен на стейдж (в список отображения). Соответственно событие ADDED_TO_STAGE он никогда не продиспатчит (разве что кто-нибудь заставит его извне это сделать))))


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

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