Actionscript:
-
package {
-
import flash.display.Sprite;
-
-
[SWF(width=500, height=500, backgroundColor=0xEFEFEF, frameRate=30)]
-
public class Main extends Sprite{
-
private var _robotManager:RobotManager;
-
public function Main(){
-
_robotManager = new RobotManager(this, 12);
-
}
-
}
-
}
-
-
class RobotManager{
-
-
private var _robots:Array;
-
private var _top:Sprite;
-
private var _robotNum:int;
-
-
public function RobotManager(top:Sprite, robotNum:int){
-
_top = top;
-
_robotNum = robotNum;
-
_robots = new Array();
-
setupRobots();
-
top.addEventListener(Event.ENTER_FRAME, onRun);
-
}
-
-
private function setupRobots():void{
-
for (var i:int = 0; i<_robotNum; i++){
-
_robots[i] = new Robot();
-
_robots[i].x = 100+(i % 3) * 150;
-
_robots[i].y = 100+int(i / 3) * 100;
-
_robots[i].addEventListener("death", onRobotDie);
-
_top.addChild(_robots[i]);
-
}
-
}
-
private function onRobotDie(evt:Event):void{
-
for (var i:int = 0; i<_robotNum; i++){
-
if (_robots[i] == evt.currentTarget){
-
_robots.splice(i, 1);
-
}
-
}
-
_robotNum--;
-
}
-
-
private function onRun(evt:Event):void{
-
collisions();
-
}
-
-
private function collisions():void{
-
var currBot:Robot;
-
for (var i:int = 0; i<_robotNum; i++){
-
currBot = _robots[i];
-
for (var j:int = 0; j<_robotNum; j++){
-
if (currBot != _robots[j]){
-
var dx:Number = currBot.x - _robots[j].x;
-
var dy:Number = currBot.y - _robots[j].y;
-
if (Math.sqrt((dx * dx) + (dy * dy)) <40){
-
currBot.die();
-
}
-
}
-
}
-
}
-
}
-
}
-
-
import flash.display.*
-
import flash.events.*;
-
-
class Robot extends Sprite{
-
private var _inc:Number
-
private var _td:Number;
-
private var _theta:Number;
-
private var _rad:Number;
-
-
public function Robot(){
-
_theta = Math.random() * (Math.PI * 2);
-
_td = _theta;
-
_inc = Math.random() * .2 + .05;
-
_rad = _inc * 10;
-
with(graphics){
-
beginFill(0x666666);
-
drawRect(-10,-10,20,20);
-
endFill();
-
beginFill(0x333333);
-
drawRect(-5, -5, 20, 10);
-
lineStyle(0,0xAAAAAA);
-
endFill();
-
drawCircle(0,0,20);
-
}
-
addEventListener(Event.ENTER_FRAME, onRun);
-
}
-
-
private function onRun(evt:Event):void{
-
_td += _inc;
-
_theta += _inc * Math.cos(_td);
-
if (x <0 || y <0 || x> 500 || y> 500){
-
_theta += Math.PI;
-
}
-
x += _rad * Math.cos(_theta);
-
y += _rad * Math.sin(_theta);
-
rotation = _theta / Math.PI * 180;
-
}
-
-
public function die():void{
-
removeEventListener(Event.ENTER_FRAME, onRun);
-
addEventListener(Event.ENTER_FRAME, onDie);
-
}
-
-
private function onDie(evt:Event):void{
-
scaleX = scaleY += .1;
-
alpha -= .1;
-
if (scaleX> 2){
-
removeEventListener(Event.ENTER_FRAME, onDie);
-
if (parent){
-
parent.removeChild(this);
-
dispatchEvent(new Event("death"));
-
}
-
}
-
}
-
}
This code should be placed in a document class... not the timeline (hopefully you already know that)
The above creates 12 wandering robots that die when they collide with one another.
This is not a snippet really... but it's only slightly over 100 lines and it contains a few tricks I find myself using from time to time.
You can view the swf here.