Видел решение у одного разработчика:

Код AS3:
stage.addEventListener(Event.ENTER_FRAME, onStage);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);
function onDown(e:KeyboardEvent)
{
keypressed[e.keyCode] = true;
}
function onUp(e:KeyboardEvent)
{
keypressed[e.keyCode] = false;
}
function onStage(e:Event)
{
var hero_dx = stage.mouseX - hero.x;
var hero_dy = stage.mouseY - hero.y;
var hero_grad = Math.atan2(hero_dy,hero_dx) * 180 / Math.PI;
hero.rotation = hero_grad;
if (keypressed[37] || keypressed[65]) hero.x -= speed;
if (keypressed[38] || keypressed[87]) hero.y -= speed;
if (keypressed[39] || keypressed[68]) hero.x += speed;
if (keypressed[40] || keypressed[83]) hero.y += speed;
if (hero.x > 800 + hero.width) hero.x = 0 - hero.width;
if (hero.y > 600 + hero.width) hero.y = 0 - hero.width;
if (hero.x < 0 - hero.width) hero.x = 800 + hero.width;
if (hero.y < 0 - hero.width) hero.y = 600 + hero.width;
}