Показать сообщение отдельно
Старый 15.05.2013, 16:57
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Да, на ум ток координата x приходит, как наиболее адекватное уникальное значение. Кому интересно, вот итоговый класс для сортировки:
Код AS3:
package mvc.view.map 
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
 
 
	/**
	 * Сортировщик дисплей объектов по оси y.
	 * Чем выше координата y тем ниже в списке отображения объект.
	 * 
	 * @author Tails
	 */
	public class Sorter{
 
		// Приват
		private var _contaner:DisplayObjectContainer;
 
		public function Sorter() {
		}
 
 
		// ГЕТТЕР-СЕТТЕРЫ
		/** Контейнер сортируемых объектов. **/
		public function get sorterContaner():DisplayObjectContainer {
			return _contaner;
		}
		public function set sorterContaner(value:DisplayObjectContainer):void {
			_contaner = value;
		}
 
 
		// ПАБЛИК
		/** Сортировать объекты. **/
		public function sort():void {
			if (!_contaner)
				throw new Error(this + ' Сортировочный контейнер не выбран.');
 
			var length:uint	= _contaner.numChildren;
			if(length > 1)
				qSort(_contaner, 0, length - 1);
		}
 
 
		/**
		 * Алгоритм быстрой сортировкки.
		 * http://ru.wikipedia.org/wiki/%D0%91%...B2%D0%BA%D0%B0
		 */
		private function qSort(a:DisplayObjectContainer, low:int, high:int):void {
			var i:int 					= low;                
			var j:int 					= high;
			var child:DisplayObject		= a.getChildAt(int((low + high) / 2));
			var x:Number 				= child.y + child.x * 0.00001;  // x - опорный элемент посредине между low и high
			do {
				while(a.getChildAt(i).y + a.getChildAt(i).x * 0.00001 < x) ++i;  // поиск элемента для переноса в старшую часть
				while(a.getChildAt(j).y + a.getChildAt(j).x * 0.00001 > x) --j;  // поиск элемента для переноса в младшую часть
				if(i <= j){           
					// обмен элементов местами:
					a.swapChildrenAt(i, j);
 
					// переход к следующим элементам:
					i++; j--;
				}
			} while(i < j);
			if(low < j) qSort(a, low, j);
			if(i < high) qSort(a, i, high);
		}
 
	}
}
__________________
Дети не должны знать о своих родителях