Форум 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)
-   -   приближённый к реалистичному drag&drop фотографии (http://www.flasher.ru/forum/showthread.php?t=98592)

fljot 17.07.2007 13:56

не осталось или ..?

etc 17.07.2007 13:59

Просто не хочу этим заниматься, извините.

fljot 17.07.2007 14:04

да я как бы сам) от вас только прошу код если не жалко. потом выложу что получилось

etc 17.07.2007 14:08

Честно говоря, я не знаю, где лежат исходники. Тем более, я на работе.
Вообще говоря, там какой-то ужас с физикой, поэтому лучше сделать на трезвую голову самостоятельно.

iNils 18.07.2007 00:27

Цитата:

Сообщение от __etc
Это просто потому что ты её в центре хватаешь. А в центре у неё центр тяжести, я не сделал мертвую зону…

Не в центре, а с краю, и точкой вращения при движении должна быть точка в которую я ткнул мышью, а у тебя она вращается относительно центра фото + мышь сползает с точки захвата.

etc 18.07.2007 00:44

Гы, а у меня не сползает :)
Да я особо и не стремился сделать реальную физику, главное эффект получить, а ньюансы не каждый заметит :D

fljot 18.07.2007 16:40

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

вот пример http://inreflected.com/fljot/test/#gallery_id=085
дальш всякие инерции можно приделывать, мне вроде не надо

код функции, отвечающей за таскание:
Код:

function phys_drag() {
        hold_x = _root._xmouse; //координата x точки захвата
        hold_y = _root._ymouse; //координата y точки захвата
       
        this.onMouseMove = function() {
               
                //коориднаты центра объекта
                center = {_x: this._x, _y: this._y};

                //точка захвата: _root._xmouse, _root._ymouse
               
                //координаты цетра тяжести
                rotation_center = {_x: 2*center._x - _root._xmouse, _y: 2*center._y - _root._ymouse};
               
                //удаление от центра фоты (относительно 1/2 диагонали)
                d_from_center = Math.sqrt(((Math.pow((_root._xmouse - center._x),2) + Math.pow((_root._ymouse - center._y),2))) / _global.diagonal_length);
               
                //коэф поворота
                K_rotation = Math.pow(d_from_center, 2);
                               
                //смещение мыши(=точки захвата) в абс СК (система координат)
                _global.hold_dx = _root._xmouse - hold_x; _global.hold_dy = _root._ymouse - hold_y;
               
                //вектор локальной оси X (в абс координатах)
                loc_Xaxis_x = hold_x - center._x;        loc_Xaxis_y = hold_y - center._y;
               
                               
                //определяем угол между абс СК и локальной СК. через скалярное произведение [1,0](=ось X) и локальной оси x
                cos_fi = loc_Xaxis_x/(Math.sqrt(loc_Xaxis_x*loc_Xaxis_x + loc_Xaxis_y*loc_Xaxis_y));
                fi = Math.acos(cos_fi);
                if (loc_Xaxis_y > 0) fi = - fi; //от -pi до pi
               
                //вычисляем относительное смешение вдоль локальных осей(в локальной СК)
                //т.е. переводим смещение  hold_dx и  hold_dy в локальную СК
                loc_dx = hold_dx*Math.cos(fi) - hold_dy*Math.sin(fi); //смещение по x в локальной
                loc_dy = hold_dx*Math.sin(fi) + hold_dy*Math.cos(fi); //смещение по y в локальной
               
                                               
                //вычисляем угол поворта. из прямоугольного треугольника,
                //противоположный нужному углу катет - это вектор смещения курсора в проекции на локальную ось Y
                //прилегающий катет - расстояние от точки захвата до центра тяжести 
                //С УЧЁТОМ КОЭФ ПОВОРОТА
                rel_dy_x = loc_dy*Math.sin(fi); //x-компонента проекции вектора смещения на локальную ось Y
                rel_dy_x_rot = rel_dy_x*K_rotation;  //x-компонента проекции вектора смещения на локальную ось Y С УЧЁТОМ КОЭФ ПОВОРОТА
                rel_dy_y = loc_dy*Math.cos(fi);  //y-компонента проекции вектора смещения на локальную ось Y
                rel_dy_y_rot = rel_dy_y*K_rotation; //y-компонента проекции вектора смещения на локальную ось Y С УЧЁТОМ КОЭФ ПОВОРОТА
                tan_psi = Math.sqrt(Math.pow(rel_dy_x_rot,2) + Math.pow(rel_dy_y_rot,2))/(2*Math.sqrt(Math.pow(loc_Xaxis_x,2) + Math.pow(loc_Xaxis_y,2)));
                psi = Math.atan(tan_psi);
                if (loc_dy < 0) psi = -psi;
                               
                //поворачиваем на угол. вращение вокруг точки захвата
                this.rotation(psi, this._parent._xmouse, this._parent._ymouse);
               
                //вычисляем как надо сместить центр(переводим смещение в абс СК)
                //сместить его надо на смещение вдоль локальной оси X и на остаток от смещения вдоль локальной Y (из-за коэф поворота)
                //смещаем центр
                //fi = 2*Math.PI - fi;
                this._x += _global.hold_dx;
                this._y += _global.hold_dy;
               
                //записываем новые координаты мыши для вычисления
                //вектора смещения в следующей ветви
                hold_x = _root._xmouse;
                hold_y = _root._ymouse;
               
                updateAfterEvent();
               
        }
}


etc 18.07.2007 16:51

А функциональная нагрузка сего действа какая?

fljot 18.07.2007 16:59

1) люди любят вертеть фоты по-своему
2) создавать атмосферу чего-то реального, лежащего на плоскости моника

наверное так

etc 18.07.2007 17:00

Тогда где тень от фотографии на «столе»?


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

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