Просмотр полной версии : плавное перемещение
я нашла интересный алгоритм перемещения и масштабирования картинок в зависимости от расположения мышки (расстояние от координат картинки до координат мыши)
как изменяется масштаб понятно, но как меняется расстояние я совершенно не могу понять, а точнее почему именно так расчитываеются параметры vx и vy
помогите разобраться пожалуйста!
я вкладываю флэшку move_.rar
Собственно,
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.
хорошо, меня интересует конкретно 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;
}
Что конкретно вам непонятно в коде? То, что берется предыдущее значение vx, vy справа в выражении или что?
если откуда они вообще взялись, то вот это место, в функции init():
var mc = _root.attachMovie("img", "img" + d, d, {col:j, row:i, vx:0, vy:0});
нет :) правила написания кода понятны!
я прошу прощение за неточность
напримет чтобы сделать простое плавное движение объекта от точки до точки можно использовать в 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
ну, не хватает меня, чтобы понять, почему так составлена формула
смысл, смысл мне формулы разъясните пожалуйста!
this.vx += (newX-this.vx)/100;
Так яснее? Это тоже самое, что вы и описали в первой части своего поста.
вот эта переменная this.vx (которая в формуле this._x += (this.x0 + this.vx - this._x) / 10) для каждого мува - это расстояние, на которое нужно переместить этот мувик по координате x
И расчитывается оно (this.vx) как сумма vx(по формуле this.vx += (newX-this.vx)/100) (слагаемых столько, сколько остальных мувиков), которые расчитываются в зависимости от масштаба остальных мувиков
моя несчастная голова этого не догоняет, я расчитывала, что мне хоть кто-нибудь по-человечески растолкует это без наводящих вопросов и намёков.
Ну тогда изучайте математику, нарисуйте на бумажке, в конце концов.
ну, бумажка не помогла, иначе бы не спрашивала, откровенно говоря
ну, в общем, большое, блин, спасибо )
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.