Сделал пока вот как, если у такого подхода есть какие то недостатки по сравнению с другим ( который я не знаю ), то то поделитесь пожалуйста им.

Код AS3:
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var _timerFrame:TimerFrame;
private var _animator:Animator;
private var _boll:Boll;
private var _convas:Convas;
public function Main()
{
init();
}
private function init(event:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler);
_timerFrame = new TimerFrame();
_boll = new Boll();
_animator = new Animator(_boll);
_animator.startX = 50;
_animator.startY = 200;
_convas = new Convas();
super.addChild(_convas);
_animator.doc = _convas;
}
private function stage_mouseUpHandler(event:MouseEvent):void
{
_timerFrame.removeAnimator(_animator);
}
private function stage_mouseDownHandler(event:MouseEvent):void
{
_timerFrame.addAnimators(_animator);
}
}
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Boll extends Sprite
{
public function Boll()
{
super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
}
private function super_addedToStageHandler(event:Event):void
{
super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
super.graphics.beginFill(0x2B81AE);
super.graphics.drawCircle(0, 0, 40);
super.graphics.endFill();
}
override public function get x():Number {return super.x ;}
override public function set x(value:Number):void { super.x = value; }
override public function get y():Number {return super.y;}
override public function set y(value:Number):void {super.y = value;}
}
}

Код AS3:
package
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.errors.IllegalOperationError;
public class Animator extends Object implements IAnimator
{
private var _boll:DisplayObject;
private var _doc:DisplayObjectContainer;
private var _startX:int;
private var _startY:int;
private var _finishX:int;
private var _finishY:int;
private var _elapsedTime:Number;
public function Animator(boll:DisplayObject)
{
_boll = boll as DisplayObject;
}
private function addCanvas():void
{
_boll.x = _startX;
_boll.y = _startY;
_doc.addChild(_boll as DisplayObject);
}
public function animation(time:Number):void
{
trace('animator');
}
public function set startX(value:int):void {_startX = value;}
public function set startY(value:int):void {_startY = value;}
public function set finishX(value:int):void {_finishX = value;}
public function set finishY(value:int):void {_finishY = value;}
public function set doc(value:DisplayObjectContainer):void
{
if (!value) throw new IllegalOperationError("");
_doc = value;
this.addCanvas();
}
public function set elapsedTime(value:Number):void
{
_elapsedTime = value;
}
}
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Convas extends Sprite
{
public function Convas()
{
super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
}
private function super_addedToStageHandler(event:Event):void
{
super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler);
}
}
}

Код AS3:
package
{
public interface IAnimator
{
function animation(time:Number):void;
}
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
public class TimerFrame extends Sprite
{
private var _elapsedTime:Number;
private var _animators:Vector.<IAnimator>;
public function TimerFrame()
{
_animators = new Vector.<IAnimator>([]);
addEventListener(Event.ENTER_FRAME, super_enterFrameHandler);
}
private function super_enterFrameHandler(event:Event):void
{
var num:Number = 5;
var length:int = _animators.length;
for (var i:int = 0; i < length; i++)
{
_animators[i].animation(num);
}
}
public function addAnimators(animator:IAnimator):void
{
_animators.push(animator);
}
public function removeAnimator(animator:IAnimator):void
{
var length:int = _animators.length;
for (var i:int = 0; i < length; i++)
{
if (_animators[i] == animator)
{
_animators.splice(i, 1);
break;
}
}
}
}
}
И прежде чем я начну делать класс дляентерФрайм + гетТаймер, хочу вот что уточнить.
Какую связку нужно или лучше делать - ентерФрайм + гетТаймер или таймер + гетТаймер?