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;
				}
				
			}
			
		}
		
	}
	
}