Форум Flasher.ru

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

rain_heart 27.04.2010 13:44

обработка событий измененного объекта
 
Вобщем есть вот такой скрип, для примера:

Класс MyButton просто создает статичный квадрат
Код AS3:

package  {
        import flash.display.*
        import flash.events.*
 
        public class MyButton extends Sprite {
 
                private var container:Sprite = new Sprite();
                private var button:Shape = new Shape();
 
                public function MyButton() {
                        Build();
                        addChild(container);
                        container.addChild(button);
                }
 
                private function Build() {
                        button.graphics.beginFill(0xFF0000, 1);
                        button.graphics.drawRect(0, 0100, 100);
                        button.graphics.endFill();
                }//end function menuBox
        }
}


А вот в этом классе загвоздка.
Код AS3:

package  {
 
        import flash.display.*
        import flash.events.*
        import MyButton;
 
        public class Test extends Sprite {
 
                private var newButton:MyButton;
 
                public function Test() {
                        newButton = new MyButton();
                        addChild(newButton);
                        newButton.addEventListener(MouseEvent.MOUSE_OVER, onOver);
                        newButton.addEventListener(MouseEvent.MOUSE_OUT, onOut);
                }
                private function onOver(e:Event):void {
                        var but:MyButton = new MyButton();
                        but.y = 100;
                        newButton.addChild(but);
                        trace('over');
                }
                private function onOut(e:Event):void {
                        trace('out')
                }
        }
}

Когда мышка наводится на квадрат, внизу создается 2 квадрат, добавляем его в переменную newButton, но если мышку опустить вниз (ниже первого исходного квадрата), то цыклично вызываются события OnOver и OnOut
Вопрос: Откуда взялось событие OnOut ???

mickfallout 27.04.2010 14:38

Вопрос в том, почему Вы считали что оно не должно взятся?

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

Код AS3:

var but:MyButton = new MyButton();
but.y = 100;
newButton.addChild(but);//новая кнопка перекрывает старую, у старой возникает событие MOUSE_OUT, оно всплывает до newButton,  и успешно обрабатывается(что вызывает добавления новой кнопки поверх старой и т.д.)


что не так?

rain_heart 27.04.2010 16:42

Цитата:

Сообщение от mickfallout (Сообщение 904050)
Вопрос в том, почему Вы считали что оно не должно взятся?

эээ. уточняю вопрос.
вот код:
Код AS3:

package  {
 
        import flash.display.*
        import flash.events.*
        import MyButton;
 
        public class Test extends Sprite {
 
                private var newButton1:MyButton;
                private var newButton2:MyButton;
                private var newContainer:Sprite = new Sprite();
 
                public function Test() {
                        newButton1 = new MyButton();
                        newButton2 = new MyButton();
                        newButton2.alpha = 0.5;
                        newButton2.x = 100;
 
                        newContainer.addChild(newButton1);//добавить 1 кнопку в контейнер
                        newContainer.addChild(newButton2);//добавить 2 кнопку в контейнер
                        addChild(newContainer);//добавляем контейнер на страницу
                        newContainer.addEventListener(MouseEvent.MOUSE_OVER, onOver);//мыш над контейнером
                        newContainer.addEventListener(MouseEvent.MOUSE_OUT, onOut);//мыш в стороне
                }
                private function onOver(e:Event):void {
                        trace('over');
                }
                private function onOut(e:Event):void {
                        trace('out')
                }
        }
}

Вопрос, я слушаю события контейнера, а получаю как бы события от его потомков ???
Как сделать так чтоб слушать событие контейнера. ну т.е. мыш сверху (не важно над какой кнопкой) - одно событие, мыш в стороне - другое событие?

BlooDHounD 27.04.2010 16:49

ROLL_OVER

mickfallout 27.04.2010 16:51

Цитата:

Вопрос, я слушаю события контейнера, а получаю как бы события от его потомков ???
ну да. почитайте про всплытие событий...

Добавлено через 1 минуту
Код AS3:

package  {
 
        import flash.display.*
        import flash.events.*
        import MyButton;
 
        public class Main extends Sprite {
 
                private var newButton1:MyButton;
                private var newButton2:MyButton;
                private var newContainer:Sprite = new Sprite();
                private var mouseOnButton1:Boolean;
                private var mouseOnButton2:Boolean;
                public function Main() {
                        super();
                        newButton1 = new MyButton();
                        newButton2 = new MyButton();
                        newButton2.alpha = 0.5;
                        newButton2.x = 100;
 
                        newContainer.addChild(newButton1);//добавить 1 кнопку в контейнер
                        newContainer.addChild(newButton2);//добавить 2 кнопку в контейнер
                        addChild(newContainer);//добавляем контейнер на страницу
                        newContainer.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler);//мыш над контейнером
                        newContainer.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);//мыш в стороне
                }
                private function rollOverHandler(e:Event):void {
                                trace('over');
                }
                private function rollOutHandler(e:Event):void {
                                trace('out')
                }
        }
}


rain_heart 27.04.2010 16:55

ООО...
это уже называется старческий маразм :))) (у меня всмысле)
я за ROLL_OVER и ROLL_OUT совсем и забыл то :(

Спасибо!!! :)


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

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