Еще код урезал теперь для System.gc() нажать 1 и начинает работать мелено.

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.events.ProgressEvent;
public class EngineerTestForFlasher extends Sprite
{
public function EngineerTestForFlasher()
{
Repository.hero= new Hero;
Repository.gamescreen.start();
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyboardControl.KeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,KeyboardControl.KeyUp);
this.addChild(Repository.gamescreen);
this.addChild(new FPSMemCounter(0));
}
}
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class GameScreen extends Sprite
{
public function GameScreen()
{
}
public function start():void
{
this.addChild(Repository.hero);
}
}
}

Код AS3:
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
public class Hero extends MovieClip
{
public static var X:Number=100;
public static var Y:Number=100;
public static var HP:int;
public static var SPEED:Number=4;
private var ROTATION:Number=0;
public static var angle:Number;
public static var keyLeft:Boolean;
public static var keyRight:Boolean;
public static var keyUp:Boolean;
public static var keyDown:Boolean;
public static var size:int=15;
public function Hero()
{
this.addEventListener(Event.ENTER_FRAME,onFrame);
var img:Sprite = new Sprite;
img.graphics.beginFill(0);
img.graphics.drawCircle(0,0,size);
this.addChild(img);
X=100;
y=100;
}
private function onFrame(e:Event):void
{
ROTATION=-1;
if(keyUp)ROTATION=0.5*Math.PI;
if(keyLeft)ROTATION=0;
if(keyRight)ROTATION=Math.PI;
if(keyDown)ROTATION=1.5*Math.PI;
if(keyUp&&keyLeft)ROTATION=0.25*Math.PI;
if(keyUp&&keyRight)ROTATION=0.75*Math.PI;
if(keyDown&&keyLeft)ROTATION=1.75*Math.PI;
if(keyDown&&keyRight)ROTATION=1.25*Math.PI;
if(ROTATION!=-1)
{
var nextX:int=X-Math.cos(ROTATION) * SPEED;
var nextY:int=Y-Math.sin(ROTATION) * SPEED;
X=nextX;
Y=nextY;
}
if(this.x!=X)this.x=X;
if(this.y!=Y)this.y=Y;
}
}
}

Код AS3:
package
{
import flash.events.KeyboardEvent;
import flash.system.System;
import flash.text.TextField;
public class KeyboardControl
{
public function KeyboardControl()
{
}
public static function KeyDown(e:KeyboardEvent):void
{
if (e.keyCode==87||e.keyCode==38) Hero.keyUp=true;
if (e.keyCode==83||e.keyCode==40) Hero.keyDown=true;
if (e.keyCode==65||e.keyCode==37) Hero.keyLeft=true;
if (e.keyCode==68||e.keyCode==39) Hero.keyRight=true;
if(e.keyCode==49)
{
System.gc();
}
}
public static function KeyUp(e:KeyboardEvent):void
{
if (e.keyCode==87||e.keyCode==38) Hero.keyUp=false;
if (e.keyCode==83||e.keyCode==40) Hero.keyDown=false;
if (e.keyCode==65||e.keyCode==37) Hero.keyLeft=false;
if (e.keyCode==68||e.keyCode==39) Hero.keyRight=false;
}
}
}

Код AS3:
package
{
public class Repository
{
public static var hero:Hero= new Hero;
public static var gamescreen:GameScreen= new GameScreen;
public function Repository()
{
}
}
}
Самое интересное что таймер работает корректно!
Видимо индусы перестарались с ENTER_FRAME