я делаю примерно так (очень упрощенно)
addEventListener(Event.ENTER_FRAME, gameLoop);
---

Код AS3:
private function gameLoop(e:Event=null):void
{
if (running) { logic(); render(); }
}
private function logic():void
{
for (var i:int = 0; i < MAX_SPRITES; i++) sprites[i].logic();
}
private function render():void
{
canvas.lock();
canvas.fillRect(rectangle, 0xffffffff);
for (var i:int = 0; i < MAX_SPRITES; i++) sprites[i].render();
canvas.unlock();
}
игровая сущность очень упрощенно так

Код AS3:
import flash.display.BitmapData;
import flash.geom.Point;
public class GameEntity extends Object
{
private var p:Point;
private var velocity:Number;
public var bitmapdata:BitmapData;
public var canvas:BitmapData;
public function GameEntity(x:Number, y:Number, velocity:Number)
{
this.p = new Point(x, y);
this.velocity = velocity;
}
public function render():void
{
canvas.copyPixels(
bitmapdata,
bitmapdata.rect,
p,
null,
null,
true
);
}
public function logic():void
{
if (p.x <= canvas.width) p.x += velocity;
else p.x = 1;
}
}