Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как удалить frameListener на главном TimeLine из мувика? (http://www.flasher.ru/forum/showthread.php?t=135166)

Captain QUAZAR 17.01.2010 19:30

Как удалить frameListener на главном TimeLine из мувика?
 
В 1-ом кадре у меня написан
Код AS3:

addEventListener(Event.ENTER_FRAME, frameList);

Но мне нужно его удалить при наведении мыши на некий мувик mc1.
Внутри этого мувика я пишу такой код
Код AS1/AS2:

this.addEventListener(MouseEvent.MOUSE_OVER, overList);
function overList(e:MouseEvent):void{
 
        removeEventListener(Event.ENTER_FRAME, frameList);
}

Ошибка - 1120: Access of undefined property frameList.
Как мне правильно указать удаление?

wvxvw 17.01.2010 19:33

Не пишите код внутри мувиков. В AS3 код пишут в классах, классы пишут в текстовых файлах с расширением AS.

Psycho Tiger 17.01.2010 19:33

Отказаться от написания в кадрах.

Диспатчить событие ребёнком, подписываться на него родителем и удалять листенер.

dimarik 18.01.2010 01:32

Во-первых, присоединяюсь к Тигре и Олегу

Для первого уровня вложенности:
Код AS3:

super.parent.removeEventListener(Event.ENTER_FRAME, super.parent.frameList);

Однако ребенок ну точно не должен рулить родителем. У меня в семье так.

Captain QUAZAR 18.01.2010 18:40

Ребята, спасибо всем, но я не очень опытный. Мне необходимы пояснения. Что я должен сделать? Создать главный класс и в снем создать экземпляры моих мувиков?
Код AS3:

super.parent.removeEventListener(Event.ENTER_FRAME, super.parent.frameList);

Здес написано "super", значит я должен наследование применить, или что?

etc 18.01.2010 22:50

Captain QUAZAR, нет, super — это признак тру-флешера. Можете вместо super писать this или вообще не писать, сразу parent и понеслась.

Psycho Tiger 19.01.2010 15:56

Цитата:

Сообщение от etc (Сообщение 880068)
Captain QUAZAR, нет, super — это признак тру-флешера. Можете вместо super писать this или вообще не писать, сразу parent и понеслась.

Тонко)
Кстати, а в байткоде есть разница?

wvxvw 19.01.2010 16:46

Есть.

Psycho Tiger 19.01.2010 17:34

А в чём?

cleptoman 19.01.2010 17:47

присоединюсь к последнему вопросу )

wvxvw 19.01.2010 18:15

Эксперементируйте:
http://www.docsultant.com/nemo440/
:)

Psycho Tiger 19.01.2010 19:24

Ого, спасибо)

etc 19.01.2010 19:59

Цитата:

Сообщение от Psycho Tiger (Сообщение 880302)
А в чём?

В инструкции, callpropvoid или callsupervoid. В скорости — никакой. Только в логике разница.

wvxvw 19.01.2010 21:24

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

Captain QUAZAR 22.01.2010 21:38

Ребята, вот я попробовал сделать, как я это понимаю, то что вы мне посоветовали.
Создаю главный класс Moover, в нем создаю экземпляры двух моих мувиков – классы Red и Black.
Код AS3:

package{
        import flash.display.*;
        import flash.events.*;
 
        public class Moover extends Sprite{
 
                public function Moover(){
                        var mc1:Black = new Black();
                        var mc2:Red = new Red();
                        mc2.x = 340;
                        mc2.y = 165;
                        mc1.x = 480;
                        mc1.y = 165;
 
                        this.addChild(mc1);
                        this.addChild(mc2);
                        trace(mc1.parent);
                        addEventListener(Event.ENTER_FRAME, frameList);
                        function frameList(e:Event):void{
                                mc1.x-=10;
                                mc2.x-=10;
                                if(mc1.x<-73){
                                        mc1.x = 600;
                                }
                                if(mc2.x<-73){
                                        mc2.x = 600;
                                }
                        }
                }
        }
}

Вот код одного из мувиков, который вроде бы должен удалять ENTER_FRAME у своего родителя – объекта класса Moover.
Код AS3:

package{
        import flash.display.*;
        import flash.events.*;
 
        public class Red extends Sprite{
 
                public function Red(){
                        this.addEventListener(MouseEvent.MOUSE_OVER, overList);
                        function overList(e:MouseEvent):void{
                                super.parent.removeEventListener(Event.ENTER_FRAME, super.parent.frameList);
                        }
                }
        }
}

Но получается такая ошибка:
Цитата:

TypeError: Error #1034: Type Coercion failed: cannot convert global@41d2041 to Function.
at MethodInfo-1()
Я, правда, нашел уже другое решение - удаляю ENTER_FRAME прямо в основ ном классе, т.к. mc1 и mc2 являются его детьми, и по наведению курсора на них фрейм листенер удаляется.:)


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

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