Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   stage ROLL_OVER почему-то не срабатывает (http://www.flasher.ru/forum/showthread.php?t=145539)

Dr_Bra 11.10.2010 20:09

stage ROLL_OVER почему-то не срабатывает
 
всем привет, подскажите почему не срабатывает событие ролл овер
Код AS3:

package com
{
        import flash.display.MovieClip;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.ui.Mouse;
 
        public class Main extends MovieClip
        {
                private static const CURSOR_X:int = 250;
                private static const CURSOR_Y:int = 150;
 
                private var cursor:MovieClip;
                private var _stage:Stage;
 
                public function Main()
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event):void
                {
                        trace("Main class loaded")
                        this.removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        _stage = stage;
                        //Mouse.hide();
                        cursor = new Cursor();
                        stage.addChild(cursor);
                        cursor.x = CURSOR_X;
                        cursor.y = CURSOR_Y;
                        cursor.rotation = -7;
 
                        _stage.addEventListener(MouseEvent.ROLL_OVER, mouseOver, false, 0, true);
 
                        _stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor, false, 0, true);                       
                }
 
                private function mouseOver(e:MouseEvent):void
                {
                        trace("mouse over")
                        cursor.gotoAndStop("handl");
                }
 
                private function moveCursor(e:MouseEvent):void
                {
                        cursor.x = stage.mouseX;
                        cursor.y = stage.mouseY;
                }
 
        }
}


alatar 11.10.2010 20:28

Какой смысл создавать переменную _stage? И зачем вам вообще в данной ситуации ROLL_OVER? У вас курсор всегда будет в положении "handl".

Добавлено через 4 минуты
Точно не помню, но stage вроде не отправляет события ROLL_OVER, MOUSE_OVER. Используйте Event.ACTIVATE.

Dr_Bra 11.10.2010 20:40

дело в том что, курсор если не наводит он движется, а как только навели на стэдж, наш курсор должен зафиксироваться

wvxvw 11.10.2010 20:46

А вы пользователя об этом предупредили? А то он наивный не знает, и будет продолжать мышкой водить...

Dr_Bra 12.10.2010 11:43

Сразу не объяснил, сори.
Делаю баннер, внутри баннера есть свой нарисованный смешной курсор, пока на баннер не навели, нарисованный курсор "дергается" ) как только мы навели на баннер, наш нарисованный курсор меняет настоящий курсор и нарисованный курсор перескакивает на кадр "handl" в этом кадре он фиксируется.

Добавлено через 50 секунд
И пользователь уже управляет "не дерганым" курсором

Добавлено через 10 минут
Цитата:

Сообщение от alatar (Сообщение 942131)
Точно не помню, но stage вроде не отправляет события ROLL_OVER, MOUSE_OVER. Используйте Event.ACTIVATE.

ACTIVATE что-то не подходит, идея такая: пользователь навел на баннер настоящий курсор и тут должно сработать событие mouseOver

iCluster 12.10.2010 11:55

Попробуйте сделать подложку у банера в виде прозрачного MovieClip - и все реакции курсора перевесить на него. Только с уходом курсора со сцены будет проблематично, но и тут можно извернуться - к примеру сделать таймер проверяющий находится ли мышь в области флешки :)

alatar 12.10.2010 12:00

Цитата:

но и тут можно извернуться - к примеру сделать таймер проверяющий находится ли мышь в области флешки
Для этого существует событие Event.MOUSE_LEAVE.
Цитата:

пользователь навел на баннер настоящий курсор и тут должно сработать событие mouseOver
Содержимое у вашего баннера будет? Вот на него слушателя и вешайте.

Wolsh 12.10.2010 15:27

stage прекрасно ловит MOUSE_MOVE

Dr_Bra 12.10.2010 15:47

а как быть в таком случае:
мы схватили предмет, начинаем его "таскать" по сцене, а под предметом который мы таскаем находится персонаж. К персонажу прикручен слушатель ROLL_OVER, но слушатель не срабатывает, хотя, к курсору и к предмету который мы таскаем прописан такой код:
Код AS3:

mouseChildren = false;


alatar 12.10.2010 15:58

Цитата:

stage прекрасно ловит MOUSE_MOVE
Это вы к чему?
Цитата:

мы схватили предмет, начинаем его "таскать" по сцене...
Как один из вариантов прописать ему, после того как схватили mouseEnabled = false и подписаться у stage на событие MOUSE_UP, по которому вернуть все обратно.

Dr_Bra 12.10.2010 16:42

Цитата:

Сообщение от alatar (Сообщение 942313)
Это вы к чему?

Как один из вариантов прописать ему, после того как схватили mouseEnabled = false и подписаться у stage на событие MOUSE_UP, по которому вернуть все обратно.

эх почти, только событие stage.MOUSE_UP, не сробатывает после того как мы присвоили объекту mouseEnabled = false

alatar 12.10.2010 17:07

Цитата:

не сробатывает
С чего вдруг? А вы попробовали?
P.S. Я не писал присвоить mouseEnabled = false для stage.

Dr_Bra 12.10.2010 17:31

не для stage, для объекта
ниче не получилось, где-то я туплю
Код AS3:

 
package com
{
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
 
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
 
    public class Main extends MovieClip
    {
        private static const CURSOR_X:int = 200;
        private static const CURSOR_Y:int = 200;
        private var f1_x:int;
        private var f1_y:int;
        private var f2_x:int;
        private var f2_y:int;
        private var f3_x:int;
        private var f3_y:int;
 
        public static var take:Boolean = false;
        private var f1:Sprite;
        private var f2:Sprite;
        private var f3:Sprite;
        private var area:Sprite;
        private var cursor:MovieClip;
 
        private var cursorTweenX:Tween;
        private var cursorTweenY:Tween;
        //private var foodTweenX:Tween;
        //private var foodTweenY:Tween;
 
        public function Main()
        {
            this.addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event):void
        {
            trace("Main class loaded")
            this.removeEventListener(Event.ADDED_TO_STAGE, init);
 
            //Mouse.hide();
            cursor = new Cursor();
            cursor.mouseEnabled = false;
            cursor.mouseChildren = false;
            stage.addChild(cursor);
            cursor.x = CURSOR_X;
            cursor.y = CURSOR_Y;
            cursor.rotation = -15;
 
            f1 = f1_mc;
            f1.mouseChildren = false;
            f1.addEventListener(MouseEvent.MOUSE_DOWN, drag, false, 0, true);
            f1.addEventListener(MouseEvent.MOUSE_UP, drop, false, 0, true);
 
            f2 = f2_mc;
            f2.mouseChildren = false;
            f2.addEventListener(MouseEvent.MOUSE_DOWN, drag, false, 0, true);
            f2.addEventListener(MouseEvent.MOUSE_UP, drop, false, 0, true);
 
            f3 = f3_mc;
            f3.mouseChildren = false;
            f3.addEventListener(MouseEvent.MOUSE_DOWN, drag, false, 0, true);
            f3.addEventListener(MouseEvent.MOUSE_UP, drop, false, 0, true);
 
            f1_x = f1.x;
            f1_y = f1.y;
            f2_x = f2.x;
            f2_y = f2.y;
            f3_x = f3.x;
            f3_y = f3.y;
 
            area = area_mc;
            area.addEventListener(MouseEvent.ROLL_OVER, mouseOver, false, 0, true);
            stage.addEventListener(Event.MOUSE_LEAVE, mouseOut, false, 0, true);
 
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown, false, 0, true);
            stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp, false, 0, true);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, moveCursor, false, 0, true);                   
        }
 
        private function drag(e:MouseEvent):void
        {
            take = true;
            e.target.startDrag();
            e.target.mouseEnabled = false;
        }
 
        private function drop(e:MouseEvent):void
        {
            take = false;
            e.target.stopDrag();
            e.target.mouseEnabled = false;       
        }
 
        private function mouseOver(e:Event):void
        {
            cursor.gotoAndStop("handl");
        }
 
        private function mouseDown(e:MouseEvent):void
        {
            cursor.cursor_in_mc.gotoAndStop(2);
        }
 
        private function mouseUp(e:MouseEvent):void
        {
            //f1.stopDrag();
            //f2.stopDrag();
            //f3.stopDrag();
            cursor.cursor_in_mc.gotoAndStop(1);
            f1.x = f1_x;
            f1.y = f1_y;
            f2.x = f2_x;
            f2.y = f2_y;
            f3.x = f3_x;
            f3.y = f3_y;
 
        }
 
        private function mouseOut(e:Event):void
        {
            cursorTweenX = new Tween(cursor, "x", Strong.easeInOut, cursor.x, CURSOR_X, 20, false);
            cursorTweenY = new Tween(cursor, "y", Strong.easeInOut, cursor.y, CURSOR_Y, 20, false);
            cursor.gotoAndPlay(1);
        }
 
        private function moveCursor(e:MouseEvent):void
        {
            cursor.x = stage.mouseX;
            cursor.y = stage.mouseY;
        }
 
    }
}


alatar 12.10.2010 17:37

Цитата:

ниче не получилось
Конкретнее, что не получилость.

Dr_Bra 12.10.2010 17:44

думаю что не нужно на объект накладывать приемник события
Код AS3:

 addEventListener(MouseEvent.MOUSE_UP, drop, false, 0, true);


Wolsh 12.10.2010 17:45

MOUSE_DOWN - на f1...f3, а MOUSE_UP вешаете на stage внутри обработчика MOUSE_DOWN. И, конечно, убираете из stage листенер этого события в обработчике самого MOUSE_UP. Вот только придется определять кто из f1...f3)) Я обычно сохраняю ссылку как _currentDragged при MOUSE_DOWN.

Dr_Bra 12.10.2010 17:46

да точно, нужно все отписать от сцены

Код AS3:

        private function mouseUp(e:MouseEvent):void
                {
                        cursor.cursor_in_mc.gotoAndStop(1);
 
                        f1.stopDrag();
                        f2.stopDrag();
                        f3.stopDrag();
 
                        f1.mouseEnabled = true;
                        f2.mouseEnabled = true;
                        f3.mouseEnabled = true;
 
                        f1.x = f1_x;
                        f1.y = f1_y;
                        f2.x = f2_x;
                        f2.y = f2_y;
                        f3.x = f3_x;
                        f3.y = f3_y;
 
                }


alatar 12.10.2010 17:47

Цитата:

думаю что не нужно на объект накладывать приемник события
Если отрубить объекту мышь, то он вообще не сработает. Соответственно drop у вас не вызовется никогда.


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

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