Просмотр полной версии : Какой стандартный алгоритм сортировки используется в методе класса Arrray.sort()
VovkaMorkovka
27.12.2007, 20:05
Привет всем!
Мне надо сортировать высоты в моей изометрической игрушке причем делать это нужно быстро. Вопрос: какой алгоритм используется в методе sort класса Array? Имеет - ли смысл руками писать более быстрый алгоритм, например сортировку Шелла?
Быть может кто - нибудь подскажет мне какой нибудь изящный метод переопределения высот кроме сбора в массив всех обьектов, которые в пределах видимости и сортировки этого массива ?
С уважением,
Владимир!
BlooDHounD
27.12.2007, 22:09
высоты нельзя сортировать в принципе. сразу нужно ставить в нужное место.
VovkaMorkovka
28.12.2007, 01:42
Я имею ввиду, что сортирую объекты, которые на стейдже используя некоторую ф - цию сравнения, потом в цикле присваиваю этим объектам глубины от нуля до n. Так вот, это долго поскольку мувиков много. Есть идея, кстати, невидимые мувики ввообще со стейджа удалять, но будет - ли это быстрее в сравнении с отображением за видимой областью?
BlooDHounD
28.12.2007, 02:08
зачем их сортировать? вы зарание должны знать на какой уровень поставить объект исходя из каких-то соображений. сортировать объекты и потом менять их слой будет работать ну совсем не быстро даже уже на небольших количествах объектов.
алгоритм художника будет эффективен только для очень небольшлго количества объектов..
VovkaMorkovka
28.12.2007, 19:16
зачем их сортировать? вы зарание должны знать на какой уровень поставить объект исходя из каких-то соображений. сортировать объекты и потом менять их слой будет работать ну совсем не быстро даже уже на небольших количествах объектов.
Тогда не могли - бы Вы подсказать как сделать следующее: у меня на стейдже есть разное количество в каждый момент времени мувиклипов, Ф - цию сравнения для сортировки я вычисляю следующим образом:
SetParameters.GAME_WIDTH*y+SetParameters.GAME_WIDTH-x;
Где x и у - координаты мувиклипа, ну и соответственно длина и ширина игры. Вопрос в том, как имея эту ф - цию оценки высоты присвоить каждому мувиклипу от 1 до n соответствующую глубину. Стыдно конечно, такое спрашивать, но... устал, конец года, туплюс.
BlooDHounD
28.12.2007, 19:58
посчитайте эти значения зарание. ПЕРЕД ТЕМ КАК ДЕЛАТЬ addChildAt высчитайте место на какую глубину его поставить.
VovkaMorkovka
28.12.2007, 20:30
посчитайте эти значения зарание. ПЕРЕД ТЕМ КАК ДЕЛАТЬ addChildAt высчитайте место на какую глубину его поставить.
Вопрос в том КАК это сделать не используя сортировку. Грубо говоря, имеется вектор целых чисел и набор индексов, причем числа все различны и мы знаем максимальное число Необходимо сопоставить каждому элементу вектора соответствующий индекс. Вопрос: как это сделать без использования сортировки?
Разве я могу как раньше в AS 2.0 поместить мувиклип на проивзольную высоту?
BlooDHounD
28.12.2007, 21:01
да. можите. не повите, я вам даже написал как. чисто империческим путём получить глубину из набора чисел ну афигенно просто.
Я так понял, что клипы в процессе игры могут менять свою глубину? Если да, то проще обрабатывать событие изменения глубины, а не сортировать каждый раз все объекты - иначе КПД такого действия будет очень маленький. Т.е. вряд ли будут ситуации, когда нельзя будет добится нужного результата просто поменяв местами 2 клипа на соседних глубинах. Т.е. просто юзать DisplayObjectContainer.swapChildrenAt()
http://livedocs.adobe.com/labs/air/1/aslr/flash/display/DisplayObjectContainer.html#swapChildrenAt()
VovkaMorkovka
28.12.2007, 21:21
Да, действительно, а я туплюс :-)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.