Форум Flasher.ru

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

Dr_Bra 02.07.2010 18:05

не срабатывает событие ADDED и REMOVED
 
пишу:
Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
        //import flash.events.MouseEvent;
 
        public class WebSite extends MovieClip
        {               
                public function WebSite():void
                {
                        if(stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(evt:Event = null):void
                {
                        var sprite=new Sprite();
                        stage.addChild(sprite);
                        sprite.addEventListener(Event.ADDED, addMoveObj);
                        function addMoveObj(evt:Event):void
                        {
                            trace("added");
                            sprite.addEventListener(Event.ENTER_FRAME, added);
                                trace(sprite);
                        }
                        sprite.addEventListener(Event.REMOVED, removeMoveObj);
                        function removeMoveObj(evt:Event):void
                        {
                            trace("removed");
                            sprite.removeEventListener(Event.ENTER_FRAME, added);
                        }
 
                        function added(evt:Event):void
                        {
 
                        }
                }
        }
}

ничего не трэсится

КорДум 02.07.2010 18:10

Используйте ADDED_TO_STAGE и REMOVED_FROM_STAGE. И, ради АДОБЫ, не используйте вложенные функции. Темой ранее из-за этого у человека ничего не работало.

Dr_Bra 02.07.2010 18:25

у меня очень часто не получается заставить что-то работать без вложенных функций, сейчас перепишу

Добавлено через 10 минут
Цитата:

Сообщение от КорДум (Сообщение 919490)
Используйте ADDED_TO_STAGE и REMOVED_FROM_STAGE. И, ради АДОБЫ, не используйте вложенные функции. Темой ранее из-за этого у человека ничего не работало.

не принесло результатов написал, как советовали:
Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
 
        public class WebSite extends MovieClip
        {
 
                private var sprite=new Sprite();
 
                public function WebSite():void
                {
                        if(stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(evt:Event = null):void
                {
                        stage.addChild(sprite);
                        sprite.addEventListener(Event.ADDED_TO_STAGE, addMoveObj);
                        sprite.addEventListener(Event.REMOVED_FROM_STAGE, removeMoveObj);
                        var moveLayers=new MoveObj(stage,layer1,layer2,layer3);
                        layer1.i1.addEventListener(MouseEvent.CLICK, one);
                }
                private function addMoveObj(evt:Event):void
                {
                    trace("added");
                    sprite.addEventListener(Event.ENTER_FRAME, added);
                }
                private function removeMoveObj(evt:Event):void
                {
                    trace("removed");
                    sprite.removeEventListener(Event.ENTER_FRAME, added);
                }
                private function added(evt:Event):void
                {
                        trace("_____________")
                }
                private function one(evt:MouseEvent):void
                {
                        removeChild(sprite);
                        //trace("click")
                }
        }
}


КорДум 02.07.2010 19:19

Показываю весь мой темповый as:
Код AS3:

package  {
        import flash.display.Sprite;
        import flash.events.Event;
 
        [SWF(backgroundColor = 0xFFFFFF, frameRate = 23, width = 550, height = 400)]
 
        /** @author KorDum **/
 
        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);
                        // entry point
 
                        var sprite:Sprite = new Sprite();
                        sprite.addEventListener(Event.ADDED, onAdd);
                        sprite.addEventListener(Event.ADDED_TO_STAGE, onAddToStage);
                        addChild(sprite);
                }
 
                private function onAdd(e:Event):void {
                        trace("added");
                }
 
                private function onAddToStage(e:Event):void {
                        trace("addedToStage");
                }
        }
}

Трейсятся оба трейса. Если убрать addChild - не трейсится ничего.

Добавлено через 6 минут
Быть может виноват порядок регистрирования слушателя и добавления в список отображения?

Dr_Bra 02.07.2010 19:38

Код AS3:

stage.addChild(sprite);

огромное спасибо, оказалось, что эту строчку нужно было поставить ниже
Код AS3:

sprite.addEventListener(Event.ADDED, onAdd);
sprite.addEventListener(Event.ADDED_TO_STAGE, onAddToStage);

Добавлено через 7 минут
удивительная штука, сначала "вешаются" события на переменную, а после этого нужно добавлять на сцену эту самую переменную ..

КорДум 02.07.2010 20:06

Все логично же. Добавили, а затем поставили слушатель на добавление, когда слушать уже нечего, ибо все добавлено.


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

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