
Код:
class ForceVector {
private var _aArr:Array = new Array(); //массив, куда пишутся координаты мыши
private var _nInterval:Number = null; //идентификатор интервальной функции
private var _timeTrigger:Number = 50; //значение по умолчанию отрезка времени в милисекундах в интервале которого должен вычисляться вектор силы
function ForceVector(nTimeTrigger:Number) { //конструктор, принимающий если надо значение временного интервала
timeTrigger = nTimeTrigger;
_aArr[0] =_aArr[1] = [_xmouse, _ymouse]; //запись начальных координат мыши при инициализации
_nInterval = setInterval(this, "recordXY", _timeTrigger); //запуск интервальной функции, соответственно переданному значению временного отрезка
}
private function recordXY():Void { //собственно запись координат в массив из двух элементов по кругу
_aArr[0] = _aArr[1];
_aArr[1] = [_xmouse, _ymouse];
}
public function getForceXY():Array { //возвращает разность актуальных координаты, записанные в массив
clearInterval(_nInterval); //убивает интервал
return [_aArr[1][0] - _aArr[0][0], _aArr[1][1] - _aArr[0][1]]; //дельта X и дельта Y - по сути это и есть вектор силы
}
public function get timeTrigger():Number { //геттер
return _timeTrigger;
}
public function set timeTrigger(nTimeTrigger:Number):Void { //сеттер
if((nTimeTrigger) && nTimeTrigger >= 10) { //проверка, что интервал передан в конструктор и, что он больше 10 мс - иначе вектор будет слишком маленьким
_timeTrigger = nTimeTrigger;
}
}
}
пример использования:

Код:
mcClip.onPress = function():Void { //какой-то клип, который надо кинуть, пнуть или еще что-то
this.startDrag(); //начинаем перетаскивание
this.force = new ForceVector(); //запускаем обсчет вектора силы
};
mcClip.onRelease = function():Void {
stopDrag();
this.aXY = this.force.getForceXY(); //создаем свойство у клипа, в которое передается дельта X и дельта Y вектора силы
delete this.force; //удаляем вектор силы
this.kick(); //какая-то функция, обрабатывающая вектор силы и совершающая необходимые действия
//доступ к дельтам через mcClip.aXY[0] и mcClip.aXY[1] - дельта X и дельта Y соответственно
};
mcClip.onReleaseOutside = mcClip.onRelease; //бывает, что при резком рывке мыши она "слетает" с мувиклипа и событие onRelease тогда не происходит