PDA

Просмотр полной версии : плавное перемещение


NtM
03.04.2007, 23:06
я нашла интересный алгоритм перемещения и масштабирования картинок в зависимости от расположения мышки (расстояние от координат картинки до координат мыши)

как изменяется масштаб понятно, но как меняется расстояние я совершенно не могу понять, а точнее почему именно так расчитываеются параметры vx и vy

помогите разобраться пожалуйста!

я вкладываю флэшку move_.rar

etc
03.04.2007, 23:10
Собственно,
MovieClip.prototype.changeScaleAndCoord = function()
{
var dx = this._x - _root._xmouse;
var dy = this._y - _root._ymouse;
var dist = Math.sqrt(dx * dx + dy * dy);

if (dist < minDist) this.newScale = minDist - dist; else this.newScale = scale0;
//изменение масштаба
this._xscale = this._yscale = this._yscale + (this.newScale - this._yscale) / 10;

//изменение координат
if (this.newScale != scale0) _root.moveImg(this.col, this.row, this.newScale * 30);
this._x += (this.x0 + this.vx - this._x) / 10;
this._y += (this.y0 + this.vy - this._y) / 10;
this.vx = this.vx * 0.5;
this.vy = this.vy * 0.5;
}

vx и vy в начале имеют значения 0.

NtM
03.04.2007, 23:36
хорошо, меня интересует конкретно this.vx
в коде

this._x += (this.x0 + this.vx - this._x) / 10;
this.vx = this.vx * 0.5;



который расчитывается непонятным мне образом в коде

MovieClip.prototype.onNewCoordParam = function (c, r, sc)
{
var _col = this.col;
var _row = this.row;
var newX = 0;
var newY = 0;
if (!(_col != c || _row != r)) return;
if (_col > c) newX = sc;
else
if (_col < c) newX = -sc;
else newX = 0;
if (_row > r) newY = sc;
else
if (_row < r) newY = -sc;
else newY = 0;
this.vy = this.vy + (newY - this.vy) / 100;
this.vx = this.vx + (newX - this.vx) / 100;
}

etc
04.04.2007, 01:41
Что конкретно вам непонятно в коде? То, что берется предыдущее значение vx, vy справа в выражении или что?

Kikasso
04.04.2007, 02:02
если откуда они вообще взялись, то вот это место, в функции init():
var mc = _root.attachMovie("img", "img" + d, d, {col:j, row:i, vx:0, vy:0});

NtM
04.04.2007, 02:22
нет :) правила написания кода понятны!
я прошу прощение за неточность

напримет чтобы сделать простое плавное движение объекта от точки до точки можно использовать в onEnterFrame мувика(mc) который мы перемещаем, формулу:
mc._x += (mc.targetX-mc._x)/mc.speed;
где mc.targetX конечная координата x мувика mc

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


в примере, о котором я спрашиваю, мы перемещаем объекты
по формуле

this._x += (this.x0 + this.vx - this._x) / 10;

где this.x0 - начальная координата мувика в "спокойном состоянии"

мне не понятен смысл расчёта параметра vx
т.е. смысл вычисления, что это значит:

this.vx = this.vx + (newX - this.vx) / 100

почему vx зависит от масштаба, почему делим на 100, почему vx умножаем на 0.5
ну, не хватает меня, чтобы понять, почему так составлена формула

смысл, смысл мне формулы разъясните пожалуйста!

etc
04.04.2007, 14:54
this.vx += (newX-this.vx)/100;
Так яснее? Это тоже самое, что вы и описали в первой части своего поста.

NtM
04.04.2007, 20:24
вот эта переменная this.vx (которая в формуле this._x += (this.x0 + this.vx - this._x) / 10) для каждого мува - это расстояние, на которое нужно переместить этот мувик по координате x

И расчитывается оно (this.vx) как сумма vx(по формуле this.vx += (newX-this.vx)/100) (слагаемых столько, сколько остальных мувиков), которые расчитываются в зависимости от масштаба остальных мувиков

моя несчастная голова этого не догоняет, я расчитывала, что мне хоть кто-нибудь по-человечески растолкует это без наводящих вопросов и намёков.

etc
04.04.2007, 20:37
Ну тогда изучайте математику, нарисуйте на бумажке, в конце концов.

NtM
04.04.2007, 20:45
ну, бумажка не помогла, иначе бы не спрашивала, откровенно говоря

ну, в общем, большое, блин, спасибо )