| caseyryan |
15.11.2017 07:42 |
Цитата:
Как инерционный сделать не знаю.
|
Общий принцип такой. По 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 и прекращаешь вычисления
|