![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2009
Сообщений: 47
|
Перерыл кучу всего, пытался подставлять разные коды, но толком так и не понял, как это делается.
Мне предстоит сделать интерфейс для тачскрина на подобии разных устройств, где при отпускании пальца страница продолжает некоторое время двигаться по инерции. На данный момент сделал так, чтобы мувик можно было двигать по горизонтали, но то, что при отпускании он останавливается как вкопанный выглядит не круто. Надо, чтоб маленько присутствовала инерция. Сейчас такой код: Что надо сюда дописать, чтоб появилась инерция? |
|
|||||
|
Регистрация: Dec 2006
Сообщений: 1,764
|
http://www.kirupa.com/forum/archive/.../t-276367.html - тут смотри решение
__________________
а за окном атлантический океан! |
|
|||||
|
Модрон-ветеринар
|
ТС, возможно, лучше будет, чтобы страница при останове все же позиционировалась там, где пользователь отжал палец, но зато сам останов сделать инерциальным?
Можно попробовать в таком случае использовать класс TweenLite, для упрощения инерционной анимации. Параметр инерционности в секундах можно менять. И onReleaseOutside тоже добавить, если что. PS. Метод startDrag нельзя использовать так, чтобы была инерция.
__________________
Идите первым! Последний раз редактировалось mooncar; 23.01.2012 в 02:01. |
|
|||||
|
Модрон-ветеринар
|
Ну уж если нужен все-таки проезд страницы дальше точки отпускания, то можно добавить некую добавочную дельту и сделать ее зависимой от того, насколько "сильно" (читай - далеко) протащили курсор.
Пример во вложении. obj1 - просто для удобства, можно в простую переменную запоминать положение мыши при нажатии. А вот obj2 используется для правильного расчета добавки.
__________________
Идите первым! Последний раз редактировалось mooncar; 23.01.2012 в 07:03. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 47
|
Это очень похоже на то, что надо! Спасибо за советы.
Добавлено через 2 часа 25 минут Появилась другая проблема. В двигающемся мувике должны располагаться кнопки со ссылками. Делаю в нем кнопки, а они как кнопки не распознаются. Курсор на них просто не реагирует. В чем тут дело? |
|
|||||
|
Модрон-ветеринар
|
Да, возникает конфликт.
Можно, например, использовать hitTest + onMouseDown и onMouseUp вместо кнопочных событий на самой "странице", то есть эмулировать их. Тогда заработают кнопки внутри. import com.greensock.*; import com.greensock.easing.*; var inertTime:Number = 1; var deltaXratio:Number = 0.5; mc.onMouseDown = mcMouseDown; mc.onMouseUp = mcMouseUp; var obj1:Object ; var obj2:Object ; function mcMouseDown() { if(this.hitTest(_root._xmouse, _root._ymouse) && !this.moved) { obj1 = { x:_root._xmouse, y:_root._ymouse }; obj2 = { x:_root._xmouse, y:_root._ymouse }; mc.globalToLocal(obj2); this.onMouseMove = mcMouseMove; this.moved = true ; } } function mcMouseUp() { if(this.moved) { delete this.onMouseMove ; this.moved = false ; } } function mcMouseMove() { var deltaX:Number = _root._xmouse - obj1.x; var newX:Number = _root._xmouse - obj2.x + deltaX * deltaXratio; TweenLite.to(mc, inertTime, {_x:newX, ease:Expo.easeOut}); }
__________________
Идите первым! Последний раз редактировалось mooncar; 23.01.2012 в 17:32. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 47
|
Понял, попробуем.
А вот еще такой вопрос. Каким образом мне зафиксировать передвижение МС в пределах определенной области? В моем варианте было так: То есть, смысл в том, что имеется большой мувик длиной 1100 пикселов, в котором располагаются кнопки и по мере перетаскивания надо, чтоб он останавливался в пределах границы видимой области. Куда мне в вашем коде эти параметры вставить? И ещё, у вас в коде имеется ссылка на папку, в которой лежит куча всяких файлов с кодами. Это для чего? ПС: Простите за столько ламерских вопросов, просто довольно редко приходится с флэшом работать. |
|
|||||
|
Модрон-ветеринар
|
По поводу папки - там находятся компоненты стороннего класса TweenLite который облегчает анимацию , некоторые необходимы при компиляции. Просто из проекта в проект переносятся.
Что касается пределов - нужно ставить проверку на конечную координату newX в onMouseMove. Попробуйте пока сами. Что-то вроде if (newX > maxX) newX = maxX UPD. Вот например, впишите в функцию onMouseMove var deltaX:Number = _root._xmouse - obj1.x; var newX:Number = _root._xmouse - obj2.x + deltaX * deltaXratio; if (newX > maxX) newX = maxX; //проверка на макс. предел TweenLite.to(mc, inertTime, {_x:newX, ease:Expo.easeOut});
__________________
Идите первым! Последний раз редактировалось mooncar; 23.01.2012 в 19:23. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 47
|
Все сделал как вы пишете. Задал maxX:Number = 0
Мувик слева прилип к левой стороне окна и двигается только влево (вправо не двигается). Это то, что надо. Ширина окна у меня сейчас 550px. Минимальный предел это newX? Задаю ему -550, по нажатию мыши он смещается влево на 550рх. При этом все умирает и больше двигать ничего не получается. |
|
|||||
|
Модрон-ветеринар
|
maxX и minX задают пределы, newX вычисляется, и сравнивается с ними.
var maxX:Number = 0 ; var minX:Number = 550 - 1100; //то есть -550, для понимания оставил выражение ............... function mcMouseMove () { var deltaX:Number = _root._xmouse - obj1.x; var newX:Number = _root._xmouse - obj2.x + deltaX * deltaXratio; if (newX > maxX) newX = maxX; if (newX < minX) newX = minX; TweenLite.to(mc, inertTime, {_x:newX, ease:Expo.easeOut}); }
__________________
Идите первым! Последний раз редактировалось mooncar; 23.01.2012 в 22:22. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|