updated: 17.01.2012
Quick follow-on from the previous post.
Added a few more features/functions that I use so feel free to give it a whirl see how you get on, please feedback with any problems or suggestions.
Quick run down of the functions:
- addListener – adds an event listener to a target with some added magical powers
- removeListener – removes a single listener assigned by the “addListener” function
- removeAllListeners – removes all listeners assigned by the “addListener” function
- buttonify – assigns some button like functionality to an interactive object
- unbuttonify – removes the functionality added by a call to the “buttonify” function
- grid – arranges the target’s children in a grid
- hbox – arranges the target’s children in a hbox
- vbox – arranges the target’s children in a vbox
- addChildren – a small short-cut to add a few children to a DisplayObjectContainer at once
- removeAllChildren – short-cut to remove all the children of a DisplayObjectContainer
more details (with code and samples) to follow but more info can be found in the docs below.
download swc:
bwhiting v1.2
docs:
click com.bwhiting.utilities
Code and Samples:
Layout functions
In the demo above there are 3 buttons.
The first button arranges the content in a hbox style with a padding of 5
The second button arranges the content in a vbox style with a padding of 5
The third button arranges the content in a grid style with fixed number of columns (in brackets) and a padding of 5
The code that drives it is very simple…
private function updateLayout(layout:String):void { if(layout == "hbox") hbox(container, padding); else if(layout == "vbox") vbox(container, padding); else if(layout == "grid") grid(container, cols, padding); } |
So what happens when you click one of those buttons is the above function is called with a parameter “layout” based on which button was clicked.
The sprite “container” holds 5 simple display objects and the functions hbox/vbox/grid all operate automatically on the children of the 1st parameter.
To to arrange display objects horizontally or vertically or in a grid only takes one line of code… 🙂
Event functions
//adds a listener to the stage for Event.RESIZE and calls the onResize function when triggered addListener(stage, Event.RESIZE, onResize); //adds a listener to mc1 for MouseEvent.CLICK and calls the handleClick1 function when triggered addListener(mc1, MouseEvent.CLICK, handleClick1); //notice how no event parameter is needed in the function private function handleClick1():void { trace("handleClick1"); } //adds a listener to mc2 for MouseEvent.CLICK and calls the handleClick2 function when triggered //but also passes mc2 in as a parameter addListener(mc2, MouseEvent.CLICK, handleClick2, mc2); private function handleClick2(mc:Movieclip):void { trace("handleClick2", mc); } //adds a listener to mc3 for MouseEvent.CLICK and calls the handleClick3 function when triggered //but also passes mc3 as a parameter and tells it to also return the event as a parameter //thanks to the return event flag (the true after mc3) addListener(mc3, MouseEvent.CLICK, handleClick3, mc3, true); private function handleClick3(mc:Movieclip, e:MouseEvent):void { trace("handleClick3", mc, e.ctrlKey); } //adds a listener to mc4 for MouseEvent.CLICK and calls the handleClick4 function when triggered //but also passes an array containing mc4 and an alpha value addListener(mc4, MouseEvent.CLICK, handleClick4, [mc4, 0.5]); private function handleClick4(array:Array):void { array[0].alpha = array[1]; } //adds a listener to mc5 for MouseEvent.CLICK and calls the handleClick5 function when triggered //but also passes the parameters mc5 and 0.5 in sequence thanks to the apply parameters flag (the true at the end)! addListener(mc5, MouseEvent.CLICK, handleClick5, [mc5, 0.5], false, true); private function handleClick5(mc:MovieClip, alpha:Number):void { mc.alpha = alpha; } //adds a listener to mc6 for MouseEvent.CLICK and calls the handleClick6 function when triggered //but also passes the parameters mc6 and 0.5 in sequence and also sends the event though addListener(mc5, MouseEvent.CLICK, handleClick5, [mc5, 0.5], true, true); private function handleClick6(mc:MovieClip, alpha:Number, e:MouseEvent):void { mc.alpha = alpha; trace(e.ctrlKey); } //notice how no event parameter is needed in the function private function onResize():void { //aligns this centrally on the stage (using the align function included in bwhiting.swc) align(this, stage); } |
This has real potential to save some typing it is also pretty powerful to if you use your imagination.
i.e.
//quick dragging! - not the best example but shows what it can do addListener(box, MouseEvent.MOUSE_DOWN, box.startDrag, [false, new Rectangle(0,0,stage.stageWidth-box.width, stage.stageHeight-box.height)], false, true); |
you can also clear a listener or remove all registered listeners with one call (must have been registered with “addListener”)
i.e.
//remove single listener removeListener(box, MouseEvent.MOUSE_DOWN); //remove all listeners attached to box removeAllListeners(box); |
b