flash on 2012-9-28
♥0 |
Line 136 |
Modified 2012-09-28 21:27:55 |
MIT License
archived:2017-03-20 17:17:02
ActionScript3 source code
/**
* Copyright fladdict ( http://wonderfl.net/user/fladdict )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/mgwP
*/
package {
import flash.system.LoaderContext;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.*;
public class FlashTest extends Sprite {
public var numberOfBoids:int = 10;
public var boids:Array = [];
public var mx:int;
public var my:int;
public var cursor:Sprite;
public var file:Sprite;
public var vx:Number = 0;
public var vy:Number = 0;
public var l:Number = 150;
public var lines:Array = [];
public function FlashTest() {
// write as3 code here..
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
this.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler,false,0,true);
cursor = new Sprite();
/*
cursor.graphics.beginFill(0xff0000,1);
cursor.graphics.drawCircle(0,0,10);
cursor.graphics.endFill();*/
this.addChild(cursor);
file = new Sprite();
file.graphics.beginFill(0xcccccc,1);
file.graphics.drawRect(-15,0,30,40);
file.graphics.endFill();
this.addChild(file);
createLine(file,cursor);
for(var i:int=0; i<numberOfBoids; i++){
var mc:MovieClip = new MovieClip();
/*
mc.graphics.beginFill(0x000000,1);
mc.graphics.drawCircle(0,0,10);
mc.graphics.endFill();*/
mc.vx = 0;
mc.vy = 0;
mc.x = Math.random()*480;
mc.y = Math.random()*480;
var bird:Loader = new Loader();
bird.load(new URLRequest("https://dl.dropbox.com/u/262233/exp/bird.png"));
bird.contentLoaderInfo..addEventListener(Event.COMPLETE, loadedHandler, false, 0, true);
bird.scaleX = bird.scaleY = Math.random()*0.2+0.15;
bird.x -=80*0.5;
bird.y -=56*0.5;
mc.addChild(bird);
this.boids.push(mc);
createLine(mc, file);
this.addChild(mc);
}
}
public function loadedHandler(e:Event):void
{
var o:Object = e.target;
}
public function enterFrameHandler(e:Event):void
{
cursor.x = this.mouseX;
cursor.y = this.mouseY;
//Spring file
var dx:Number = file.x - cursor.x;
var dy:Number = file.y - cursor.y;
var dist:Number = Math.sqrt(dx*dx+dy*dy);
var f:Number;
if(dist<1){
f = 0;
}else{
f = (l - dist);
}
vx = vx*0.5 + dx/dist*f;
vy = vy*0.5 + dy/dist*f + 3;
file.x += vx;
file.y += vy;
file.rotation = Math.atan2(dy,dx)*180/Math.PI-90;
this.updateBoids();
this.updateLines();
}
public function updateBoids():void
{
for(var i:int=0; i<boids.length; i++)
{
var b0:MovieClip = boids[i];
var fx:Number = 0;
var fy:Number = 0;
for(var j:int=0; j<boids.length;j++)
{
var b1:MovieClip = boids[j];
if(b0==b1) continue;
var dx:Number = b1.x - b0.x;
var dy:Number = b1.y - b0.y;
var dist:Number = Math.sqrt(dx*dx+dy*dy);
var area:Number = Math.random()*50+70;
if(dist<area){
fx -= dx / dist*1.5;
fy -= dy / dist*1.5;
}else{
fx += dx / dist*1.5;
fy += dy / dist*1.5;
}
}
dx = cursor.x - b0.x;
dy = cursor.y - b0.y;
dist= Math.sqrt(dx*dx+dy*dy);
fx += dx/dist*1.5;
fy += dy/dist*1.5;
b0.vx = b0.vx*0.9 + fx;
b0.vy = b0.vy*0.9 + fy;
b0.x += b0.vx;
b0.y += b0.vy;
}
}
public function createLine(t0:Sprite, t1:Sprite):void
{
var l:Sprite = new Sprite();
l.graphics.lineStyle(0,0xaaaaaa,1);
l.graphics.moveTo(0,0);
l.graphics.lineTo(100,100);
l.graphics.endFill();
this.addChild(l);
var line:Object = {};
line.target1 = t0;
line.target2 = t1;
line.sprite = l;
lines.push(line);
}
public function updateLines():void
{
for(var i:int=0; i<lines.length; i++){
var l:Object = lines[i];
l.sprite.x = l.target1.x;
l.sprite.y = l.target1.y;
l.sprite.scaleX = (l.target2.x - l.target1.x)/100;
l.sprite.scaleY = (l.target2.y - l.target1.y)/100;
}
}
public function mouseMoveHandler(e:MouseEvent):void
{
this.mx = this.mouseY;
this.my = this.mouseY;
}
}
}