This code gets all the words in in the xml and arranges them in order… Copy it into a frame and see for yourself… I’m not too sure what the functions are doing though can someone please explain?
var xml:XML = new XML(<xml>
<starter value="There once was a">
<right value="dog that">
<right value="bit the mailman">
<right value="that he">
<right value="ran away"/>
<left value="cried"/>
</right>
</right>
<left value="had no owner"></left>
</right>
<left value="man called">
<left value="Bob">
<left value="who thought a lot"/>
</left>
<right value="tom who liked">
<right value="actionscript"/>
<left value="to flirt with">
<right value="loose women"/>
<left value="complete strangers"/>
</left>
</right>
</left>
</starter>
</xml>);
var sx:int = 0;
var sy:int = 200;
traverse(xml.starter, sx, sy, 0);
function traverse(node:XMLList, sx:int, sy:int, ri:int) {
var o:* = drawNode(node.@value, sx, sy, ri);
sx = o.x;
sy = o.y;
var paths:int = 0;
if (node.left.length() == 1) {
traverse(node.left, sx, sy-7, ri-22.5);
paths++;
}
if (node.right.length() == 1) {
traverse(node.right, sx, sy+7, ri+22.5);
paths++;
}
}
function drawNode(t:String, x:int, y:int, r:int):* {
var font:Verdana8pt = new Verdana8pt();
var format:TextFormat = new TextFormat();
format.font = font.fontName;
format.color = 0x000000;
format.size = 8;
var label:TextField = new TextField();
label.embedFonts = true;
label.autoSize = TextFieldAutoSize.LEFT;
label.antiAliasType = AntiAliasType.ADVANCED;
label.defaultTextFormat = format;
label.text = t;
var nr:Number = (r+label.rotation) * (Math.PI/180);
var nx:Number = x + ((label.width + 5) * Math.cos(nr) );
var ny:Number = y + 7 + ((label.width + 5)* Math.sin(nr) );
label.rotation += r;
label.x = x;
label.y = y;
addChild(label);
return {x:nx, y:ny, r:nr};
}