function getLineTimeline(p1:Point, p2:Point, hops:Number):Array { var points:Array = [p1]; var stepX:Number = (p2.x - p1.x) / hops; var stepY:Number = (p2.y - p1.y) / hops; for (var i:Number = 1; i <= hops; i++) points[points.length] = new Point(points[points.length - 1].x + stepX, points[points.length - 1].y + stepY); return(points); } function tweenLine( mc:MovieClip, p1:Point, p2:Point, hops:Number, interval_time:Number, onComplete:Function, onStep:Function ) { if (_intervalID) clearInterval(_intervalID); var points = getLineTimeline(p1, p2, hops); var obj:Object = {count:0, points:points, mc:mc, onComplete:onComplete, onStep:onStep}; mc.intv = setInterval( function(obj:Object) { obj.mc._x = obj.points[obj.count].x; obj.mc._y = obj.points[obj.count].y; if (obj.onStep != null) obj.onStep(); if (++obj.count > obj.points.length) { clearInterval( mc.intv ); if (obj.onComplete != null) obj.onComplete(); } }, interval_time, obj); }