Тема: Scroll movieclip
Показать сообщение отдельно
Старый 15.11.2017, 07:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Как инерционный сделать не знаю.
Общий принцип такой. По ENTER_FRAME или по таймеру фиксируешь положение своего мувика, а в следующем кадре замеряешь разницу текущего и прошлого положения. Это и будет скорость, с которой он должен двигаться после отпускания. А дальше, для затухания лучше всего использовать какой-то готовый твинер. Мне лично, больше всех нравится TweenMax.
В общем, примерно как-то так:
Код AS3:
var velocity:Point = new Point();
var prevPos:Point = new Point();
var isMouseDown:Boolean = false;
 
function onMouseDown(e:MouseEvent):void {
    isMouseDown = true;
}
function onMouseUp(e:MouseEvent):void {
    isMouseDown = false;
    velocity.x = clip.x - prevPos.x; // замеряешь скорость
    velocity.y = clip.y - prevPos.y;
    // скорость будет затухать и клип будет двигаться медленнее в течение полсекунды, пока не остановится
    TweenMax.to(velocity, .5, {
       x: 0,
       y: 0,
       onUpdate: function():void {
          clip.x += velocity.x;
          clip.y += velocity.y;
       }
    });
}
function onEnterFrame(e:Event):void {
    if (isMouseDown) {
         // пока держишь мышь, фиксируй перемещение клипа
         prevPos.x = clip.x;
         prevPos.y = clip.y;
    }
 
}
Но в принципе, для линейного затухания ты можешь обойтись и без твина. Просто в том же энтер фрейм обработчике отнимай какое-то число от скорости, например 0.02, пока скорость не станет <= 0. Дальше ставишь ее ровно в 0 и прекращаешь вычисления
__________________
Ко мне можно и нужно обращаться на ты)