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

Timerlan 03.02.2012 14:24

Мышиные события рута, если в руте только графика
 
Привет.
Столкнулся с такой ситуацией.
В рут классе флэшки пишем:
Код AS3:

addEventListener(MouseEvent.CLICK, function() { trace("click"); });
graphics.beginFill(0, 1);
graphics.drawRect(0, 0, 500, 500);
graphics.endFill();

События не отправляются. Однако, если подписаться на стейдж, они есть. Если тоже самое обернуть в спрайт, тоже все хорошо, т.е. такая ситуация актуальна только для рут-спрайта. Если слушать событие в фазе захвата, его тоже нет. Есть какое-то объяснение этому?

silin 03.02.2012 14:58

да вроде бы все логично: графика сама по себе не генерит мышиных событий, их генерит Sprite (точнее InteractiveObject), в котором эта графика находится, а внутри получается нет target'а - нет и события
и да, рут-спрайт здесь не причем, это справедливо для любого спрайта - изнутри графику точно также не 'слышно'

BuKT 03.02.2012 15:01

Цитата:

Сообщение от dimarik (Сообщение 1006885)
DocumentClass не слушает события мыши.

Отсюда

Timerlan 03.02.2012 15:05

О как. Спасибо.

silin 03.02.2012 15:22

имхо непонятка какая-то насчет DocumentClass'а, что-то тут мэтр попутал :)
любой спрайт не слушает свою графику, и не только векторную, к слову
Код AS3:

package
{
        import flash.display.*;
        import flash.events.*;
 
        public class Main extends Sprite
        {
                public function Main():void
                {
                        var test:Sprite = new Test();
                        addChild(test);
                        test.addEventListener(MouseEvent.CLICK, test_click);
 
                }
                private function test_click(e:MouseEvent):void
                {
                        // здесь ловим
                        trace( "Main.test_click > e : " + e );
 
                }
        }
}
 
import flash.display.*;
import flash.events.*;
 
class Test extends Sprite
{
 
        public function Test()
        {
                addEventListener(MouseEvent.CLICK, this_click, true);
                graphics.beginFill(0, 1);
                graphics.drawRect(0, 0, 500, 500);
                graphics.endFill();
                addChild(new Bitmap(new BitmapData(200, 200, false, 0xFF0000)));
 
        }
 
        private function this_click(e:MouseEvent):void
        {
                // здесь не ловим
                trace( "Test.this_click > e : " + e );
 
        }
}


Timerlan 03.02.2012 15:27

Хм....Забавно. Не только графику, кстати. Объект Видео тоже не слушает. Т.е. получается, что любой контейнер в котором только объекты не дающие событый, не видит собственные события внутри себя.

silin 03.02.2012 15:59

упс, извиняюсь: все правильно Мук написал про Vector graphics ignored in main-class instance
Код AS3:

public function Main():void 
{
        graphics.beginFill(0, 1);
        graphics.drawRect(0, 0, 500, 500);
        graphics.endFill();
        stage.addEventListener(MouseEvent.CLICK, stage_click);
        addChild(new Bitmap(new BitmapData(200, 200, false, 0xFF0000)));
}
 
private function stage_click(e:MouseEvent):void
{
        // если бы рут ловил свою графику имели бы [object Main]
        // но имеем всегда [object Stage]
        trace( "e.target : " + e.target );
}

т.е. мало того, что ее изнутри не видно как у всех, рут не генерит ничего и как оболочка


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

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