![]() |
Перетаскивание объекта с инерцией
Перерыл кучу всего, пытался подставлять разные коды, но толком так и не понял, как это делается.
Мне предстоит сделать интерфейс для тачскрина на подобии разных устройств, где при отпускании пальца страница продолжает некоторое время двигаться по инерции. На данный момент сделал так, чтобы мувик можно было двигать по горизонтали, но то, что при отпускании он останавливается как вкопанный выглядит не круто. Надо, чтоб маленько присутствовала инерция. Сейчас такой код: Код AS1/AS2:
|
http://www.kirupa.com/forum/archive/.../t-276367.html - тут смотри решение
|
Вложений: 1
ТС, возможно, лучше будет, чтобы страница при останове все же позиционировалась там, где пользователь отжал палец, но зато сам останов сделать инерциальным?
Можно попробовать в таком случае использовать класс TweenLite, для упрощения инерционной анимации. Параметр инерционности в секундах можно менять. И onReleaseOutside тоже добавить, если что. PS. Метод startDrag нельзя использовать так, чтобы была инерция. |
Вложений: 1
Ну уж если нужен все-таки проезд страницы дальше точки отпускания, то можно добавить некую добавочную дельту и сделать ее зависимой от того, насколько "сильно" (читай - далеко) протащили курсор.
Пример во вложении. obj1 - просто для удобства, можно в простую переменную запоминать положение мыши при нажатии. А вот obj2 используется для правильного расчета добавки. |
Это очень похоже на то, что надо! Спасибо за советы.
Добавлено через 2 часа 25 минут Появилась другая проблема. В двигающемся мувике должны располагаться кнопки со ссылками. Делаю в нем кнопки, а они как кнопки не распознаются. Курсор на них просто не реагирует. В чем тут дело? |
Да, возникает конфликт.
Можно, например, использовать hitTest + onMouseDown и onMouseUp вместо кнопочных событий на самой "странице", то есть эмулировать их. Тогда заработают кнопки внутри. Код AS1/AS2:
|
Понял, попробуем.
А вот еще такой вопрос. Каким образом мне зафиксировать передвижение МС в пределах определенной области? В моем варианте было так: Код AS1/AS2:
Куда мне в вашем коде эти параметры вставить? И ещё, у вас в коде имеется ссылка на папку, в которой лежит куча всяких файлов с кодами. Это для чего? ПС: Простите за столько ламерских вопросов, просто довольно редко приходится с флэшом работать. |
По поводу папки - там находятся компоненты стороннего класса TweenLite который облегчает анимацию , некоторые необходимы при компиляции. Просто из проекта в проект переносятся.
Что касается пределов - нужно ставить проверку на конечную координату newX в onMouseMove. Попробуйте пока сами. Что-то вроде if (newX > maxX) newX = maxX UPD. Вот например, впишите в функцию onMouseMove Код AS1/AS2:
Код AS1/AS2:
|
Все сделал как вы пишете. Задал maxX:Number = 0
Мувик слева прилип к левой стороне окна и двигается только влево (вправо не двигается). Это то, что надо. Ширина окна у меня сейчас 550px. Минимальный предел это newX? Задаю ему -550, по нажатию мыши он смещается влево на 550рх. При этом все умирает и больше двигать ничего не получается. |
maxX и minX задают пределы, newX вычисляется, и сравнивается с ними.
Код AS1/AS2:
|
| Часовой пояс GMT +4, время: 07:04. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.