Показать сообщение отдельно
Старый 19.08.2011, 14:15
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
типа подсказка как построить дерево
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			var data:XML =
			<node label="root">
				<node label="level1_1">
					<node label="level1_1_1"/>
					<node label="level1_1_2"/>
				</node>
				<node label="level1_2">
					<node label="level1_2_1">
						<node label="level1_2_1">
							<node label="level1_2_1_1"/>
						</node>
					</node>
				</node>
			</node>;
 
			addChild(new Node(data));
 
		}
 
	}
 
}
//////////////
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
 
class Node extends Sprite
{
	public const GAP:Number = 10;
	public var label:TextField = new TextField();
	private var data:XML;
 
	public function Node(data:XML)
	{
		this.data = data;
		//рисует себя
		label.text = data.@label;
		label.autoSize = TextFieldAutoSize.LEFT;
		label.border = true;
		label.background = true;
		label.backgroundColor = 0xEEEEEE;
		addChild(label);
		addEventListener(Event.ADDED_TO_STAGE, addedToStage);
 
		// добавляет детей
		for (var i:int = 0; i < data.*.length(); i++)
		{
			addChild(new Node(data.*[i]));
		}
 
 
	}
 
	private function addedToStage(e:Event):void
	{
		removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
 
		y = parent.getBounds(parent).bottom + GAP;
		x = parent.x + GAP;
		if (parent is Node)
		{
			var pRect:Rectangle = Node(parent).label.getRect(this);
			if (parent is Node)
			{
				graphics.lineStyle(0);
				graphics.lineTo(pRect.left, pRect.bottom);
			}
		}
	}
 
}