![]() |
приближённый к реалистичному drag&drop фотографии
привет. помогите пожалуйста с алгоритмом, что-то я завяз. может упёрся во что-то и ошибки в упор не вижу, бывает же такое.
отец iNils, надеюсь тебя это заинтересует и пособишь! задача с точки зрения AS вроде незаковыристая, дело просто в алгоритме исполнения. требуется: реализовать drag&drop приближённый к реалистичному миру. таскаем фотку(как по столу, прижав слегка и подняв мокрым пальцем=) ). берём за уголочек - "центр тяжести" на противоложном уголке и поворот осуществляется по полной программе(коэф. поворота 1). берём в центре - "центр тяжести" тут же, коэф поворота ноль(если точно в цетре схватить то типа не образуется крутящего момента). в промежуточных точках захвата - соответственно, тока коэф поворта(например) изменяется нелинейно чтоб меньше чувствовался жёсткий алгоритм. вобщем что-то оно не так крутится как задумывалось.. главная неуверенность из-за осей x и y, которые во флеше смотрят не вправо и наверх, а вправо и вниз соотв. вобщем буду признателен если просмотрите код и поможете найти неправильность логики. (прим по коду: локальная ось X - из центра до точки захвата. локальная Y ей пепрендикулярна по часовой стрелке ну как и глобальные xy) ход реализации следующий: при зажатой кнопке и движении мыши: - записываем координаты центра фоты (center{_x,_y}) - через точку захвата и коорд. центра вычисляем "центр тяжести" (rotation_center{_x,_y}) - вычисляем коэф. поворота (нормированный, квадрат удаления от цетра фоты. K_rotation) - через прошлое и новое положение мыши вычисляем смещение мыши (hold_dx, hold_dy) - вычисляем вектор локальной оси Х в абс. СК(система координат)(loc_Xaxis_x, loc_Xaxis_y) - определяем угол между абс СК и локальной СК. через скалярное произведение абс. оси x (как ветор [1,0]) и ветора локальной X (вот тут я уже начинаю сомневаться) - вычисляем относительное смешение вдоль локальных осей(в локальной СК) (loc_dx, loc_dy) далее такая логика: за поворот отвечает смещение вдоль локальной оси Y (плюс ещё учёт коэф. поворота). за смещение фоты отвечает остальная часть вектора смещения(т.е. смещение вдоль локальной X и ещё остаток если коэф поворта был != 1) - вычисляем угол поворта psi. из прямоугольного треугольника: противоположный нужному углу катет - это вектор смещения курсора в проекции на локальную ось Y, прилегающий катет - расстояние от точки захвата до центра тяжести -поворачиваем на угол. вращение вокруг центра тяжести -теперь смещаем фоту. на смещение вдоль локальной оси X и ещё остаточек от применения коэф. поворта -записываем новые координаты мыши исходник: http://***********/2691216 код: Код:
function phys_drag() { |
У меня нет детей, я точно помню :)
Немудрено, что вы запутались. Реализовать такой код линейно не лучший способ, а уж разбираться в нем совсем сложно. Поэтому лишь дам пару советов: 1. Логически отдельные операции лучше вынести в отдельные методы, спрятав ненужные хвосты. 2. Математическую модель отделить от мувиклипа вобще. 3. Вместо фото на этапе моделирования надо выводить вектора направлений. Это поможет лучше ориентироваться. |
iNils,
векторами тогда буду бить охъ.. пункт2 поясни пожалуйста, что здесь от чего отделить можно? |
У вас центр точно по центру?
|
Цитата:
Цитата:
|
|
Не реалистично, если взять картинку и начать крутить ее в пределах площади самой картинки, то возникает ощущение, что к ней моторчик пределан. Да и поворчивается она в сторону где разница между вектором "тяжести" и направления меньше, а не по ходу движения.
|
Это просто потому что ты её в центре хватаешь. А в центре у неё центр тяжести, я не сделал мертвую зону…
|
Цитата:
могу я вас просить о коде касаемо этой части флешки? в личку отправил для чего) |
Пожалуй, в данном случае я вам помочь ничем не могу.
|
| Часовой пояс GMT +4, время: 19:30. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.