Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   плавное перемещение в точку клика мышкой (http://www.flasher.ru/forum/showthread.php?t=67785)

xapek 11.08.2005 13:32

плавное перемещение в точку клика мышкой
 
новая трабла :p ... есть картинка, подшружается мувик, по щелчку в люб области мувик туда перемещается (эт делает след. код). а нада чтобы он ПЛАВНО туда перемещался...

_m = _root.createEmptyMovieClip("pnt",2);
_m._x=200; _m._y=200;
_m.attachMovie("pnt","pnt",200);
someListener = new Object();
someListener.onMouseDown = function ()
{
_m._x=_xmouse;
_m._y=_ymouse;
};
Mouse.addListener(someListener);

iNils 11.08.2005 14:00

Код:

speed = 10;
_m = _root.createEmptyMovieClip ("pnt", 2);
_m._x = 200;
_m._y = 200;
_m.attachMovie ("pnt", "pnt", 200);
someListener = new Object ();
someListener.onMouseDown = function () {
        _m.dx = (_xmouse - _m._x) / speed;
        _m.dy = (_ymouse - _m._y) / speed;
        _m.cx = 0;
        _m.onEnterFrame = _m.enterFrame;
};
Mouse.addListener (someListener);
_m.enterFrame = function () {
        this.cx++;
        if (this.cx == speed) {
                delete this.onEnterFrame;
        }
        this._x += this.dx;
        this._y += this.dy;
};


xapek 11.08.2005 17:31

все атлично. спасиба ;)

xapek 12.08.2005 16:08

я сразу заметил, но все думал как исправить ошибку. не вышло.
дело в то что идет зависимость шага по перемещению объекта от конечного рассояния. т.е. чем дальше точка клика тем быстрее, чем ближе - не дождешься пока доедет. а while(this._x <= this._xmouse) {образно} не работает корректно. есть идеи?

pogga 12.08.2005 16:24

задай постоянную скорость - без приращения - будет всегда одинаково
или задай несколько случаев, чтоб скорость была больше/меньше в зависимости от чегототам

iNils 12.08.2005 17:01

Цитата:

Сообщение от pogga
задай постоянную скорость - без приращения - будет всегда одинаково
или задай несколько случаев, чтоб скорость была больше/меньше в зависимости от чегототам

Не совсем. Если задать постоянную скорость, скажем 10, то движение строго по одной из осей так и останется, но вот диагонали скорость будет уже корень из 200. поэтому нужно использовать тригонометрию
вычислять с помощью atan угол движения и потом по косинусу угла *10 (для оси х) и синусу угла * 10 (для оси у) находить смещение.

KidsKilla 12.08.2005 17:26

Код:

speed = 3;
_m = _root.createEmptyMovieClip ("pnt", 2);
_m._x = 200;
_m._y = 200;
_m.attachMovie ("pnt", "pnt", 200);
someListener = new Object ();
someListener.onMouseDown = function () {
        _m.endx = _xmouse;
        _m.endy = _ymouse;
        _m.onEnterFrame = _m.enterFrame;
};
Mouse.addListener (someListener);
_m.enterFrame = function () {
        this.cx++;
        if (Math.abs(this._x-this.endx)<1&&Math.abs(this._y-this.endy)<1) {
                this._x = this.endx;
                this._y = this.endy;
                delete this.onEnterFrame;
        }
        this._x += (this.endx-this._x)/speed;
        this._y += (this.endy-this._y)/speed;
};

оно?

pogga 12.08.2005 17:31

угу, согласен 8) я как то не задумался об относительности понятия скорости в даноом случае ) - начал бы делать, тогда б сразу и вылезло ))

xapek 12.08.2005 18:41

2KidsKilla: тоже самое, только в профиль. теперь по мере приблежения тормозит...
мой вариант по наводке iNils:

Код:

speed=10;
_m = _root.createEmptyMovieClip ("pnt", 2);
_m._x = 10; _m._y = 10;
_m.attachMovie ("pnt", "pnt", 200);
someListener = new Object ();
someListener.onMouseDown = function () {
        if(_xmouse<_m._x && _ymouse<_m._y)        {
                alfa=Math.atan((_m._y-_ymouse)/(_m._x-_xmouse));
                tmpx=-1; tmpy=-1;}
        else if(_xmouse>_m._x && _ymouse<_m._y)        {
                alfa=Math.atan((_m._y-_ymouse)/(_xmouse - _m._x));
                tmpx=1; tmpy=-1;}
        else if(_xmouse<_m._x && _ymouse>_m._y)        {
                alfa=Math.atan((_ymouse - _m._y)/(_m._x-_xmouse));
                tmpx=-1; tmpy=1;}
        else if(_xmouse>_m._x && _ymouse>_m._y)        {
                alfa=Math.atan((_ymouse - _m._y)/(_xmouse-_m._x));
                tmpx=1; tmpy=1;        }
};
Mouse.addListener (someListener);
_m.onEnterFrame = function () {
        this._x += speed*Math.cos(alfa)*tmpx;
        this._y += speed*Math.sin(alfa)*tmpy;
};

только теперь остановить не знаю как :rolleyes:

iNils 12.08.2005 18:48

а зачем столько подсчетов?

зная растояние до цели и скорость объекта, можно расчитать количество шагов нужных до достижения цели.


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

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