Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Непонятки с mouseEnabled - все равно приходит событие. (http://www.flasher.ru/forum/showthread.php?t=146554)

Волгоградец 11.11.2010 13:44

Непонятки с mouseEnabled - все равно приходит событие.
 
Привет. Или я чего-то недопонял или это фича флэша. Ситуация такая - подписываюсь на роллАут --> мышь находится над объектом --> вызывается mouseEnabled = false --> событие роллАут срабатывает.

Код AS3:

mc.addEventListener(MouseEvent.ROLL_OUT, test);
function test(event:MouseEvent):void
{
        trace(mc.mouseEnabled);
}
setTimeout(function():void{mc.mouseEnabled = false}, 1000);

Я больше склоняюсь к тому что это баг, но может кто-то развеет мои сомнения.

bav 11.11.2010 14:12

Странно. У меня вот такой код:
Код AS3:

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

        public class Main extends Sprite
        {
                private var mc:MovieClip;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        mc = new MovieClip();
                        mc.graphics.beginFill(0x0000FF);
                        mc.graphics.drawCircle(stage.stageWidth / 2, stage.stageHeight / 2, 300);
                        mc.graphics.endFill();
                        mc.addEventListener(MouseEvent.ROLL_OUT, test);
 
                        addChild(mc);
                        setTimeout(function():void { mc.mouseEnabled = false; trace("done"); }, 1000);
                }
 
                private function test(event:MouseEvent):void
                {
                        trace(mc.mouseEnabled);
                }
        }
}

работает так, как и ожидается. Т.е. mc.mouseEnabled = false; не диспачит события MouseEvent.ROLL_OUT.

Lecosson 11.11.2010 14:23

Вы, наверное, имели ввиду, что события срабатывает даже с mouseenabled=flase
У вашего MC случайно "деток" нету? Попробуйте mouseChildren=false.

Волгоградец 11.11.2010 14:26

Хех, странно. У меня все по прежнему - даже с твоим кодом.

Lecosson, нет - у моего MC нет вложенных клипов.

КорДум 11.11.2010 14:28

Какой ФП и СДК у вас, Волгоградец, и у вас, bav?

leofit 11.11.2010 14:29

Если mc пустой, то работает как надо
Если в нем лежат другие объекты, то происходит тоже что и у Волгоградца
Такая конструкция решила вроде проблему
Код AS3:

mc.addEventListener(MouseEvent.ROLL_OUT, test);
function test(event:MouseEvent):void
{
        trace(mc.mouseEnabled);
}
setTimeout(function():void{mc.mouseEnabled = false; mc.mouseChildren = false}, 1000);


bav 11.11.2010 14:33

FD - FlashDevelop 3.2.2 RTM for Microsoft.NET 2.0 Runtime
SDK - 4.1

Волгоградец 11.11.2010 14:34

Компилировал и в ЦС4 и с помощью СДК 4.1. Плеер последний.

mouseChildren роли не играет, т.к. детей нет. С вложенными клипами и с установленными mc.mouseEnabled = false и mc.mouseChildren = false фича воспроизводится.

КорДум 11.11.2010 14:37

Странно, может, опять происки АДОБА? Хотя, СДК-то один...

Волгоградец 11.11.2010 14:39

Нашел в джире:
https://bugs.adobe.com/jira/browse/FP-5597
Так что останавливаемся на том - что это баг.


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

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