Не смог открыть твой пример.
Написал свой.

Код AS3:
package{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.utils.Dictionary;
import flash.ui.Keyboard;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flashx.textLayout.formats.Direction;
import flash.geom.Point;
import flash.events.MouseEvent;
public class Main extends MovieClip {
private var _keys : Array = new Array();
private var _ball : MovingObject;
private var _bullets : Vector.<MovingObject> = new Vector.<MovingObject>();
public function Main() {
_ball = new MovingObject(createBall());
_ball.speed = 5;
addChild(_ball);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(MouseEvent.CLICK, clickHandler);
}
private function createBall(radius : Number = 10, color : uint = 0x0):Sprite{
var ball : Sprite = new Sprite();
ball.graphics.beginFill(color, 0.5);
ball.graphics.drawCircle(0,0, radius);
return ball;
}
private function clickHandler(event : MouseEvent):void{
makeShot();
}
private function makeShot():void{
var bullet : MovingObject = new MovingObject(createBall(5, 0xFF));
var vector : Point = new Point();
addChild(bullet);
_bullets.push(bullet);
// задаем начальные координаты пули
bullet.x = _ball.x;
bullet.y = _ball.y;
// получаем вектор движения пули
vector.x = stage.mouseX - _ball.x;
vector.y = stage.mouseY - _ball.y;
// нормализуем вектор
vector.normalize(1);
// задаем направление пули найденным вектором
bullet.direction = vector;
bullet.speed = 10;
}
private function keyDownHandler(event : KeyboardEvent):void{
_keys[event.keyCode] = true;
}
private function keyUpHandler(event : KeyboardEvent):void{
_keys[event.keyCode] = false;
}
private function enterFrameHandler(event : Event):void{
handleKeys();
refreshPositions();
}
private function refreshPositions():void{
refreshPosition(_ball);
for(var i : int = 0; i < _bullets.length; i++){
var bullet : MovingObject = _bullets[i];
refreshPosition(bullet, true);
}
}
private function refreshPosition(object : MovingObject, noReturn : Boolean = false):void{
object.x += object.direction.x * object.speed;
object.y += object.direction.y * object.speed;
if(noReturn){
return;
}
if(object.x < 0){
object.x = stage.stageWidth;
} else if(object.x > stage.stageWidth){
object.x = 0;
}
if(object.y < 0){
object.y = stage.stageHeight;
} else if(object.y > stage.stageHeight){
object.y = 0;
}
}
private function handleKeys():void{
_ball.direction = new Point(0,0);
for(var key : String in _keys){
if(!_keys[key]){
continue;
}
switch(parseInt(key)){
case Keyboard.DOWN:
_ball.direction.y += 1 ;
break;
case Keyboard.UP:
_ball.direction.y -= 1;
break;
case Keyboard.LEFT:
_ball.direction.x -= 1;
break;
case Keyboard.RIGHT:
_ball.direction.x += 1;
break;
}
}
}
}
}
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.geom.Point;
internal class MovingObject extends Sprite{
private var _direction : Point = new Point(0,0);
private var _view : DisplayObject;
private var _speed : Number;
public function MovingObject(view : DisplayObject = null){
setView(view);
}
public function setView(view : DisplayObject):void{
if(_view){
removeChild(_view);
}
_view = view;
if(_view){
addChild(_view);
}
}
public function set speed(speed : Number):void{
_speed = speed;
}
public function get speed():Number{
return _speed;
}
public function set direction(direction : Point):void{
_direction = direction;
}
public function get direction():Point{
return _direction;
}
}