nesting(function(calls()))

[SWF(width=500, height=500, backgroundColor=0x000000, frameRate=30)]

for (var i:int = 0; i<10; i++){
       // draggable ellipse
	var dot:Sprite = drag(createSprite("Ellipse",  -10, -10, 20, 20));
	dot.x = Math.random() * stage.stageWidth ;
	dot.y = Math.random() * stage.stageHeight ;
}

for (i = 0; i<10; i++){
  
      var box:Sprite = drag(spin(createSprite("Rect", -20, -20, 40, 40, 0xFF0000), Math.random()*5 + 1));
	box.x = Math.random() * stage.stageWidth ;
	box.y = Math.random() * stage.stageHeight ;
}


 // createSprite can create ellipses or rectangles
function createSprite(shape:String, xp:Number, yp:Number, w:Number, h:Number, col:uint=0x444444):Sprite {
	var s:Sprite = new Sprite();
	s.graphics.beginFill(col);
	// trick from a previous post
	s.graphics["draw" + shape](xp, yp, w, h);
	addChild(s);
	return s;
}

// drag and spin add listeners to an untyped target and return that target for easy function nesting
function drag(target:*):*{
	target.addEventListener(MouseEvent.MOUSE_DOWN, function(evt:MouseEvent){ evt.currentTarget.startDrag(); });
	return target;
}

function spin(target:*, speed:Number):*{
	target.addEventListener(Event.ENTER_FRAME, function(evt:Event){ evt.currentTarget.rotation+=speed; });
	return target;
}

stage.addEventListener(MouseEvent.MOUSE_UP, function(){ stopDrag() });

The above will create some draggable circles and some rotating draggable rects… but that’s not really the point….

When prototyping and just playing around I write functions that take an Object as an argument, alter that Object in some way and pass that some Object out as a return value…. this makes it so I can write things like this:

drag(spin(createSprite("Rect", -20, -20, 40, 40, 0xFF0000), Math.random()*5 + 1));

Readability can be a problem so… consider that before using this for anything…

Leave a Reply

Your email address will not be published. Required fields are marked *