ничего сверхъестественного

Код AS3:
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
import flash.display.MovieClip;
import com.greensock.*;
import com.greensock.easing.*;
import hype.extended.layout.ShapeLayout;
import hype.extended.behavior.VariableVibration;
import hype.framework.core.ObjectPool;
public class CreepCrowd extends Sprite
{
private var creeps:Array = [];
private var targetPointX:Number;
private var targetPointY:Number;
private var respawnZone:MovieClip;
private var respawnZoneLayout:ShapeLayout;
public function CreepCrowd(respawnZone:MovieClip, targetPointX:Number, targetPointY:Number, num:Number=100)
{
this.respawnZone = respawnZone;
this.targetPointX = targetPointX;
this.targetPointY = targetPointY;
respawnZoneLayout = new ShapeLayout(respawnZone);
createNamedCreeps(num);
addEventListener(Event.ENTER_FRAME, moveCreep);
}
public function moveCreep(e:Event):void
{
for each (var itemNamed:CreepNamed in creeps)
{
var item:Creep = itemNamed.getCreep();
var point:Point = item.globalToLocal(new Point(targetPointX, targetPointY));
if (point.y > 2) {
item.rotation += item.getRotationSpeed();
} else if (point.y < -2){
item.rotation -= item.getRotationSpeed();
}
itemNamed.x += Math.cos(item.rotation * (Math.PI / 180)) * item.getSpeed();
itemNamed.y += Math.sin(item.rotation * (Math.PI / 180)) * item.getSpeed();
}
}
private function createNamedCreeps(num:Number):void {
for (var i:int = 0; i < num; i++)
{
var creepNamed:CreepNamed = new CreepNamed();
var creep:Creep = creepNamed.getCreep();
creep.rotation = Math.random() * 360;
creep.setSpeed(Math.random() * 0.5 + 0.2);
creep.setRotationSpeed(Math.random() * 3 + 2);
respawnZoneLayout.applyLayout(creepNamed);
addChild(creepNamed);
creeps.push(creepNamed);
}
}
public function getCreepArray():Array {
return creeps;
}
public function killCreep(creep:CreepNamed):void {
removeChild(creep);
creeps.splice(creeps.indexOf(creep), 1);
}
}
CreepNamed представляет собой символ Creep с привязанным к нему текстовым полем

Код AS3:
import flash.display.Sprite;
import flash.text.*;
import flash.ui.Keyboard;
public class CreepNamed extends Sprite {
private var creep:Creep;
private var txt:String;
public function CreepNamed(coord_x:int = 0, coord_y:int = 0) {
x = coord_x;
y = coord_y;
creep = new Creep();
creep.x = coord_x;
creep.y = coord_y;
txt = new String();
for (var i=0; i<5; i++) {
txt = txt.concat(String.fromCharCode(Math.random() * 10 + 80)).toLowerCase();
}
var txtField:TextField = new TextField();
txtField.text = txt;
txtField.textColor = 0xFFFFFF;
txtField.width = 50;
txtField.height = 20;
txtField.mouseEnabled = false;
txtField.type = TextFieldType.DYNAMIC;
txtField.x = creep.x - 20;
txtField.y = creep.y - 25;
addChild(creep);
addChild(txtField);
}
public function getCreep():Creep {
return creep;
}
public function getText():String {
return txt;
}
}
Ну и сам Creep

Код AS3:
import flash.display.MovieClip;
import flash.text.*;
import flash.ui.Keyboard;
public class Creep extends MovieClip {
private var speed:Number;
private var rotationSpeed:uint;
public function Creep() {
graphics.beginFill(0x000000);
graphics.drawRect( -5, 0, 10, 2);
graphics.endFill();
}
public function setSpeed(speed:Number):void {
this.speed = speed;
}
public function getSpeed():Number {
return speed;
}
public function setRotationSpeed(rotationSpeed:uint):void {
this.rotationSpeed = rotationSpeed;
}
public function getRotationSpeed():uint {
return rotationSpeed;
}
}