Форум 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=94073)

NtM 03.04.2007 23:06

плавное перемещение
 
Вложений: 1
я нашла интересный алгоритм перемещения и масштабирования картинок в зависимости от расположения мышки (расстояние от координат картинки до координат мыши)

как изменяется масштаб понятно, но как меняется расстояние я совершенно не могу понять, а точнее почему именно так расчитываеются параметры 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

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

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


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

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