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

Psycho Tiger 10.10.2009 22:07

Сэмулировать клик по сцене
 
Интересует, а возможно ли обмануть всех и заставить флешку думать, что только что произошел клик юзером. Не важно где. Чтобы те клипы, которые под мышкой получили события клика? Была идея с getObjectsUnderPoint, но как там сэмулировать клик, ведь имена методов-обработчиков совершенно разные, да и более того, может быть подписан чей то ребенок, а обработчик быть в родителе... то есть нужно именно испустить такое событие. Как?

alecsisk 10.10.2009 22:46

Код AS3:

dispatchEvent(new MouseEvent(MouseEvent.CLICK));

?
LOL, выглядит конечно прикольно.

elfon 10.10.2009 23:58

Работает, классная фишка.

Psycho Tiger 12.10.2009 19:14

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author FluFme
        */

 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
 
                private function init(e:Event = null):void
                {
 
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        var l:Sprite = new Sprite();
                        l.graphics.beginFill(0xFFFFFF * Math.random(), 1);
                        l.graphics.drawRect(0, 0, 200, 200);
                        l.x = 100;
                        l.y = 100;
                        addChild(l);
                        var c:Sprite = new Sprite();
                        c.graphics.beginFill(0xFFFFFF * Math.random(), 1);
                        c.graphics.drawRect(0, 0, 100, 100);
                        c.x = 100;
                        c.y = 100;
                        addChild(c);
 
                        c.addEventListener(MouseEvent.CLICK, click2);
                        l.addEventListener(MouseEvent.CLICK, click1);
                        stage.addEventListener(MouseEvent.CLICK, click);
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
                }
 
                private function onKey(e:KeyboardEvent):void
                {
                        dispatchEvent(new MouseEvent(MouseEvent.CLICK));
                }
 
                private function click(e:MouseEvent):void
                {
                        trace("Stage");
                }
 
                private function click1(e:MouseEvent):void
                {
                        trace("1");
                }
 
                private function click2(e:MouseEvent):void
                {
                        trace("2");
                }
 
        }
 
}

При клавиатуре работает только Stage.

elfon 12.10.2009 19:57

Естественным путём события мыши рассылают конечные объекты, а не контейнер.
Событие просто не доходит до C и L.

Psycho Tiger 12.10.2009 21:09

Цитата:

Сообщение от elfon (Сообщение 857286)
Естественным путём события мыши рассылают конечные объекты, а не контейнер.
Событие просто не доходит до C и L.

Именно. Единственное что вижу - это getObjectsUnderPoint, и уже там рассылать мышинный клик - и там уже генерировать события.
Просто хотел узнать, нет ли более правильного варианта.


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

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