Форум 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=159093)

BuKT 27.06.2011 12:01

Не отрабатывает листенер мыши
 
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
/**
        * ...
        * @author Me
        */

        public class Main extends MovieClip {
 
                public function Main() {
                        addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
                }
 
                private function addedToStageListener(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
                        graphics.beginFill(0x000000);
                        graphics.drawCircle(300, 300, 20);
                        graphics.endFill();
                        addEventListener(MouseEvent.CLICK, mouseClickListener)
                        trace (hasEventListener(MouseEvent.CLICK)); //True
                }
 
                private function mouseClickListener(e:MouseEvent):void {
                        trace ('olololololol'); //Никогда не вызывается
                }
      }
}

Аналогично для маусап, маусмув и прочих. Что я делаю не так?

t4arty 27.06.2011 13:04

что бы сработало Вам надо найти область которую занимает Ваш Main и нажать на нее = ), тогда заработает

Sintesis 27.06.2011 15:36

вот так можно:

Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.events.Event;
/**
        * ...
        * @author Me
        */

        public class Main extends Sprite {
 
                public function Main() {
 
 
                        addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
                }
 
                private function addedToStageListener(e:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
 
                        var circle:MovieClip = new MovieClip();
                        circle.graphics.beginFill(0x000000);
                        circle.graphics.drawCircle(300, 300, 20);
                        circle.graphics.endFill();
                        circle.addEventListener(MouseEvent.CLICK, mouseClickListener);
 
                        stage.addChild(circle);
                }
 
                private function mouseClickListener(e:MouseEvent):void {
                        trace ('olololololol'); //Никогда не вызывается
                }
    }
}


spooner 27.06.2011 15:36

Не рисуйте в graphics Main'а, создайте Sprite, добавте его addChild'ом в Main и рисуйте в нем.

bav 27.06.2011 16:09

Sintesis, spooner, да, со спрайтом клики обрабатываются. Но вот вопрос, отчего же не работает первый вариант с рисованием прямо в Main? Меня это, признаться удивило.

serogah 27.06.2011 17:57

Привет!
Цитата:

Sintesis, spooner, да, со спрайтом клики обрабатываются. Но вот вопрос, отчего же не работает первый вариант с рисованием прямо в Main? Меня это, признаться удивило.
Потому что класс Graphics наследуется только от Object - следственно он не реагирует на события "мыши".

КорДум 27.06.2011 18:12

Цитата:

Потому что класс Graphics наследуется только от Object - следственно он не реагирует на события "мыши".
Не в ту сторону мыслите. Main расширяется от наследника InteractiveObject, а значит клики должны срабатывать.

dimarik 27.06.2011 18:19

DocumentClass не слушает события мыши.

bav 28.06.2011 02:15

Благодарствую.

КорДум 28.06.2011 03:02

Развеяли непонятку, Дмитрий.


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

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