Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перехватить MouseEvent и послать далее (http://www.flasher.ru/forum/showthread.php?t=143981)

Robotex 30.08.2010 21:03

Перехватить MouseEvent и послать далее
 
Ситуация такая: есть контейнеры на флешке. В них добавляются мувики (SimpleButton). Нужно чтобы при нажатии на мувик, мы переходили по ссылке. Но прикол в том, что мы не можем заставить слушать событие мувик, только контейнер. Но контейнер не регистрирует событие, т.к. его перехватывает мувик. А если мы отключим мувику мышь, то он перестанет изменяться при наведении мыши и клике. Как бы красиво выйти из ситуации?

SunShadow 30.08.2010 21:28

SimpleButton - это стандартный класс кнопки а не мувика. Когда вы щелкаете по кнопке, то событие передается по всей цепочке от stage к вашей кнопке и потом обратно пузыриком к stage. Прервать передачу события можно в любом зарегестрированном слушателе с помощью event.stopPropagation() или event.stopPropagationImmediate(). Если вы этого не делаете, то ловите спокойно событие на любом из объектов списка отображения от кнопки до всех в которые она вложена.

dimarik 30.08.2010 22:51

Цитата:

Ситуация такая: есть контейнеры на флешке. В них добавляются мувики (SimpleButton)
Это не мувики, я Вас уверяю. Мувиком там и не пахнет.

@SunShadow

Код AS3:

Event#stopImmediatePropagation?


Robotex 30.08.2010 23:50

Это я так выразился. Это swf-ки, у которых на stage добавлена кнопка (причем работать должно и с обычными роликами, потому и "мувики"). А слушателя цепляю к MovieClip, в который добавляется ролик.
Если прописать mouseChildren = false, то ролики нажимаются, но не реагируют на наведение мышью, в противном случае реагируют, но не нажимаются. Как решить?

dimarik 30.08.2010 23:53

Цитата:

Ситуация такая: есть контейнеры на флешке.
Цитата:

Это я так выразился. Это swf-ки, у которых на stage добавлена кнопка
Как-нибудь проще можно? Я не понял.

SunShadow 31.08.2010 08:05

Выложи исходник, так дело быстрее пойдет.)

Цитата:

Сообщение от dimarik (Сообщение 932459)
Код AS3:

Event#stopImmediatePropagation?


Каюсь, подцепил какую то заразу, голова плохо соображала когда набирал.

Psycho Tiger 31.08.2010 09:39

Цитата:

Но прикол в том, что мы не можем заставить слушать событие мувик, только контейнер.
Мы можем заставить слушать любой IEventDispatcher. Любой DisplayObject тоже к нему относится.

А почему не подписать бы этот СимплоБутонМувик?

Robotex 31.08.2010 13:07

Исходник показать, увы, не могу (политика компании - запрещено передавать код сторонним лицам - у нас в нем очень инновационные идеи)

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

etc 31.08.2010 13:41

Цитата:

Сообщение от Robotex (Сообщение 932594)
политика компании - запрещено передавать код сторонним лицам - у нас в нем очень инновационные идеи

Инновационнее некуда (особенно SimpleButton). Потом и на работу брать некого из-за «инноваций».

Psycho Tiger 31.08.2010 19:09

Извините, если я сейчас Вас оскорблю, но в
Цитата:

Ситуация такая: есть контейнеры на флешке. В них добавляются мувики (SimpleButton). Нужно чтобы при нажатии на мувик, мы переходили по ссылке.
не пахнет новизной. У вас может быть игра с совершенно невероятным геймплеем или что-то в этом роде, но из кода по переходе по ссылке что-то понять о проекте в целом просто невозможно, поэтому это попахивает маразмом. Я Вас не осуждаю, но что есть.)

Но в целом революция есть.
Код AS3:

[Embed(source = '../lib/1-1.png')] private var pic:Class;
        public function Main():void
        {
                        var spr:Sprite = new Sprite();
 
                        (spr.addChild(new MovieClip()) as DisplayObjectContainer).addChild(new pic() as Bitmap); //строчка ужас, просто писать лень =)
 
                        spr.addEventListener(MouseEvent.CLICK, onClick);
 
                        super.addChild(spr);
        }
 
                private function onClick(event:MouseEvent):void
                {
                        trace("белочка");
                }

У меня выводит "белочка". А у Вас?


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

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