Wanderer Flying Sprites
This is a way to implement a wanderer flying animation to any display object. you can check out the demo on wonderfl below.
Flying Shapes - wonderfl build flash online
package
{
import flash.display.Sprite;
import flash.geom.Matrix;
public class FlashTest extends Sprite
{
public function FlashTest()
{
var matr:Matrix = new Matrix();
matr.createGradientBox(100, 100, 0, -50, -50);
for (var i:int = 0; i < 30; i++)
{
var squ:Square = new Square();
var c:Number = Math.random() * 0xFFFFFF;
squ.graphics.beginGradientFill("radial", [c, c+100], [1, 0], [0x00, 0xFF], matr);
squ.graphics.drawRect(-50, -50, 100, 100);
squ.graphics.endFill();
squ.maxW = squ.width;
squ.maxH = squ.height;
squ.offsetH = squ.offsetW = 60;
squ.growAmmount = Math.random();
squ.x = Math.random() * (stage.stageWidth - squ.width/2);
squ.y = Math.random() * (stage.stageHeight - squ.height/2);
squ.easing = Math.random()/10;
addChild(squ);
}
}
}
}
import flash.display.Sprite;
import flash.events.Event;
class Square extends Sprite
{
private var menor :Boolean = false;
private var posx :Number;
private var posy :Number;
private var targetX :Number;
private var targetY :Number;
private var vx :Number;
private var vy :Number;
public var changeDimensions :Boolean = true;
public var easing :Number = 0.01;
public var offsetW :Number = 10;
public var offsetH :Number = 10;
public var offsetX :Number = 10;
public var offsetY :Number = 10;
public var maxW :Number;
public var maxH :Number;
public var growAmmount :Number = 0.1;
public function Square()
{
this.addEventListener(Event.ADDED_TO_STAGE, startLoop);
this.addEventListener(Event.REMOVED_FROM_STAGE, clearLoop);
}
private function clearLoop(e:Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, clearLoop);
this.removeEventListener(Event.ENTER_FRAME, float);
}
private function startLoop(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, startLoop);
this.targetX = this.x + offsetX;
this.targetY = this.y + offsetY;
this.vx = 0;
this.vy = 0;
this.addEventListener(Event.ENTER_FRAME, float);
}
public function float(e:Event):void
{
var ax:Number = (this.targetX - this.x) * Math.random()*this.easing;
var ay:Number = (this.targetY - this.y) * Math.random()*this.easing;
this.vx += ax/2;
this.vy += ay/2;
this.x += vx;
this.y += vy;
if (changeDimensions)
{
if ((this.width <= maxW || this.height <= maxH) && menor)
{
this.width +=growAmmount;
this.height +=growAmmount;
} else
{
menor = false;
this.width -= growAmmount;
this.height -= growAmmount;
if (this.width <= offsetW || this.height <= offsetH)
{
menor = true;
vx = vy = 0;
}
}
}
}
}