Проблема заключается в том, что при очень быстром движении "пальца" возбуждается событие OUT. Мне нужно этого избежать. Как это исправить?

Код AS3:
package
{
import flash.display.*;
import flash.events.*;
public class Inertia extends MovieClip
{
private var inertObj:MovieClip;
private var friction:Number = .96;
public function Inertia( _obj:MovieClip ):void
{
this.inertObj = _obj;
}
public function set setFriction( _friction:Number ):void
{
// Трение в пределах 0..1
if( _friction > 1 )
friction = 1;
else
if( _friction < 0 )
friction = 0;
else
friction = _friction;
}
public function get getFriction( ):Number
{
return friction;
}
// Установить инерцию
public function setInertia( ):void
{
// Позиции
var oldX:Number = 0;
var oldY:Number = 0;
var newX:Number = 0;
var newY:Number = 0;
var xSpeed,ySpeed:Number;
var offsetX,offsetY:Number;
inertObj.addEventListener( TouchEvent.TOUCH_BEGIN, _beginDrag );
function _beginDrag( e:TouchEvent ):void
{
offsetX = e.localX;
offsetY = e.localY;
inertObj.addEventListener( TouchEvent.TOUCH_END, _endDrag );
inertObj.addEventListener( TouchEvent.TOUCH_MOVE, _moveDrag );
inertObj.addEventListener( TouchEvent.TOUCH_OUT, _outDrag );
inertObj.startTouchDrag( e.touchPointID );
inertObj.removeEventListener( Event.ENTER_FRAME, _moveInert );
}
function _outDrag( e:TouchEvent ):void
{
inertObj.removeEventListener( TouchEvent.TOUCH_OUT, _outDrag );
inertObj.removeEventListener( TouchEvent.TOUCH_END, _endDrag );
inertObj.removeEventListener( TouchEvent.TOUCH_MOVE, _moveDrag );
inertObj.stopTouchDrag( e.touchPointID );
inertObj.addEventListener( Event.ENTER_FRAME, _moveInert );
}
function _endDrag( e:TouchEvent ):void
{
inertObj.removeEventListener( TouchEvent.TOUCH_END, _endDrag );
inertObj.removeEventListener( TouchEvent.TOUCH_OUT, _outDrag );
inertObj.removeEventListener( TouchEvent.TOUCH_MOVE, _moveDrag );
inertObj.stopTouchDrag( e.touchPointID );
inertObj.addEventListener( Event.ENTER_FRAME, _moveInert );
}
function _moveDrag( e:TouchEvent ):void
{
newX = e.stageX;
xSpeed = newX - oldX;
oldX = newX;
newY = e.stageY;
ySpeed = newY - oldY;
oldY = newY;
}
function _moveInert( e:Event ):void
{
inertObj.x += xSpeed;
inertObj.y += ySpeed;
xSpeed *= friction;
ySpeed *= friction;
if(inertObj.x > stage.stageWidth - inertObj.width / 2)
{
inertObj.x = stage.stageWidth - inertObj.width / 2;
xSpeed *= -1;
}
if(inertObj.x < inertObj.width / 2)
{
inertObj.x = inertObj.width / 2;
xSpeed *= -1;
}
if(inertObj.y > stage.stageHeight - inertObj.height / 2)
{
inertObj.y = stage.stageHeight - inertObj.height / 2;
ySpeed *= -1;
}
if(inertObj.y < inertObj.height / 2)
{
inertObj.y = inertObj.height / 2;
ySpeed *= -1;
}
}
}
}
}