PDA

Просмотр полной версии : плавное перемещение в точку клика мышкой


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
задай постоянную скорость - без приращения - будет всегда одинаково
или задай несколько случаев, чтоб скорость была больше/меньше в зависимости от чегототам
Не совсем. Если задать постоянную скорость, скажем 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
а зачем столько подсчетов?

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

xapek
12.08.2005, 22:50
все спасибо за участие :D все давно получилось как оказалось