Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MovieClip под курсором (http://www.flasher.ru/forum/showthread.php?t=137189)

aassaaa 06.03.2010 20:53

MovieClip под курсором
 
Добрый день снова.

Опять у меня проблема с которой не могу разобраться...
В общем пока задача совсем простая - нужно чтобы MovieClip всегда находился под курсором мышки. Ну и еще нужно чтобы событие было в самом классе мувика.

Если коротко, то сделал вот так
Код AS3:

        this.x = mouseX;
this.y = mouseY;

И получил очень странный эфект - мувик скачет через кадр то в точку 0;0 то куда-то в район курсора... Вроде уже делал такое вот слежение за курсором и все было хорошо, а что в этот раз я совсем не понимаю..


Весь исходник
Значит вот основной класс

Код AS3:

package {
        import flash.display.MovieClip;       
        import Point_mc;
 
        public class Main extends MovieClip {
 
                public function Main () {
 
                        var point:Point_mc = new Point_mc();
                        point.x = point.y  = 100;
                        addChild(point);
 
 
                }       
        }
 
 
}

А вот класс мувика Point_mc

Код AS3:

package {
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.ui.Mouse;
 
        public class Point_mc extends MovieClip {
 
                public var _click:Boolean = false;
 
                public function Point_mc () {
                        this.addEventListener(Event.ENTER_FRAME,point_mover);
                        this.addEventListener(MouseEvent.MOUSE_DOWN,click_down);
                        this.addEventListener(MouseEvent.MOUSE_UP,click_up);
 
                }
 
 
                public function point_mover(e:Event):void {
                        if (_click){                       
                                this.x = mouseX;
                                this.y = mouseY;
                        }
                }
                public function click_down(e:MouseEvent):void {
                        _click = true;
                        Mouse.hide();
                }
                public function click_up(e:MouseEvent):void {
                        _click = false;
                        Mouse.show();
                }               
        }
 
 
}

Помогите!

ratin 06.03.2010 21:08

Во-первых, вы не с той стороны подошли к решению задачи - вы повесили слушатель на ENTER_FRAME, что делать вовсе не обязательно.
Повесьте слушатель на MOUSE_MOVE, и добавьте в e.updateAfterEvent, например:


Код AS1/AS2:

obj.addEventListener(MouseEvent.MOUSE_DOWN,pickUp);
obj.addEventListener(MouseEvent.MOUSE_UP,place);
function pickUp(e:MouseEvent):void{
        stage.addEventListener(MouseEvent.MOUSE_MOVE, changeXY);
}
function place(e:MouseEvent):void{
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, changeXY);
}
function changeXY(e:MouseEvent):void{
        obj.x = stage.mouseX;
        obj.y = stage.mouseY;
        e.updateAfterEvent();
}


aassaaa 06.03.2010 21:21

Вложений: 1
Тут согласен, сейчас полазил по форуму и уже заметил что так можно было сделать

но проблему это не решило (

Кстате вот можно посмотреть на результат
Вложение 23982

dixus 06.03.2010 21:56

Небось используете mouseX вместо stage.mouseX, вот и получается фигня (mouseX и mouseY хранят координаты мыши относительно DisplayObject'а, а не сцены)

aassaaa 06.03.2010 22:08

Уууу спасибо ))))))

ratin 07.03.2010 15:51

Гм, вообще-то я так вам и написал в коде
Код AS3:

obj.x = stage.mouseX;
obj.y = stage.mouseY;



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

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