На коленке:

Код AS3:
// интерфейс
package
{
public interface IMoveObject {
function xMove(i:int):void;
function yMove(i:int):void;
function set speed (value:Number):void ;
function get speed ( ):Number ;
}
}
// Hero
package
{
import flash.display.Sprite;
public class Hero extends Sprite implements IMoveObject
{
private var _speed:int;
public function Hero ( ) {
graphics.beginFill(0xFF8040);
graphics.drawCircle(0, 0, 20);
graphics.endFill( );
}
/* INTERFACE IMoveObject */
public function xMove(i:int):void { x += i; }
public function yMove(i:int):void { y += i; }
public function set speed(value:Number):void { _speed = value; }
public function get speed( ):Number { return _speed; }
}
}
// controller
package
{
import flash.display.Stage;
import flash.events.KeyboardEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Controller
{
private var object:IMoveObject;
private var timer:Timer;
private var stage:Stage;
private const LEFT:int = 37;
private const TOP:int = 38;
private const RIGHT:int = 39;
private const BOTTOM:int = 40;
private var moveLeft:Boolean;
private var moveTop:Boolean;
private var moveRight:Boolean;
private var moveBottom:Boolean;
public function Controller (stage:Stage, object:IMoveObject) {
this.object = object;
this.stage = stage;
timer = new Timer(10);
}
private function onTimerEvent(e:TimerEvent):void {
if (moveLeft) object.xMove(-object.speed);
if (moveRight) object.xMove(object.speed);
if (moveTop) object.yMove(-object.speed);
if (moveBottom) object.yMove(object.speed);
}
private function onKeyUp(e:KeyboardEvent):void {
switch(e.keyCode) {
case LEFT: moveLeft = false; break;
case TOP: moveTop = false; break;
case RIGHT: moveRight = false; break;
case BOTTOM: moveBottom = false; break;
default : return;
}
}
private function onKeyDown(e:KeyboardEvent):void {
switch(e.keyCode) {
case LEFT: moveLeft = true; break;
case TOP: moveTop = true; break;
case RIGHT: moveRight = true; break;
case BOTTOM: moveBottom = true; break;
default : return;
}
}
public function set interactiv (value:Boolean):void {
if (value) {
timer.addEventListener(TimerEvent.TIMER, onTimerEvent);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
timer.start( );
} else {
timer.stop( );
timer.removeEventListener(TimerEvent.TIMER, onTimerEvent);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp);
}
}
}
}
// Main
package
{
import flash.display.Sprite;
public class Test2D extends Sprite
{
public function Test2D ( ) {
var hero:Hero = new Hero( );
hero.speed = 10;
hero.x = 100;
hero.y = 100;
addChild(hero);
var control:Controller = new Controller(stage, hero);
control.interactiv = true;
}
}
}