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
demo here
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);
} |
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);
} |
//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); |
//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); |
//remove single listener
removeListener(box, MouseEvent.MOUSE_DOWN);
//remove all listeners attached to box
removeAllListeners(box);
b