Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2013, 01:14
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 1  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
Question Сортировка отображения

как сделать что бы нормально отображались объекты и не дергались деревья ?(видео ниже)
Код AS3:
objects.sortOn("y");
for each (var obj:DisplayObject in objects)
addChild(obj);
получается вот это (видео)

Старый 12.09.2013, 02:34
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
в коде ошибки нет. показывайте весь код
__________________
Марк Tween

Старый 12.09.2013, 06:36
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,642
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
в коде ошибки нет. показывайте весь код
Вообще-то есть. В сортировке не указано, что значение "y" числовое, поэтому сортируется по строкам

Код AS3:
objects.sortOn("y", Array.NUMERIC);
var i:int = objects.length;
while (i--) {
	var childIndex:int = getChildIndex(objects[i]);
	if (childIndex != i) {
		setChildIndex(objects[i], i);
	}
}

Старый 12.09.2013, 16:43
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Вообще-то есть. В сортировке не указано, что значение "y" числовое, поэтому сортируется по строкам
Да это уже без разницы, в прикрепленном файле видна перетасовка, анимация и т.п. Здесь же показан частный единчиный случай, в котором такой зависимости быть не может
__________________
Марк Tween

Старый 12.09.2013, 16:59
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 5  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
В документации по Array.sortOn (ну и в Array.sort, наверное, тоже) написано, что сортировка не стабильная (not stable). Так что порядок "равных" элементов может меняться.

Выходов два. Либо определить порядок так, чтобы он был стабильным (было меньше "равных" элементов). Либо использовать стабильную сортировку (написать ее руками).

Старый 12.09.2013, 16:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,642
Записей в блоге: 4
Цитата:
Да это уже без разницы
Разница, как раз таки есть

Старый 12.09.2013, 17:16
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
arraySort.sort(mySort);
 
private function mySort(objA:Object, objB:Object) {
 
	if (objA.y<objB.y) 
	{
		return 1;
	} 
	else if (objA.y>objB.y) 
	{
		return -1;
	} 
	else 
	{ 
		return 0;
	}
}
 
for ( var newDepth:uint=0; newDepth<arraySort.length; newDepth++) 
	setChildIndex(arraySort[newDepth], newDepth);
__________________
return this...

Старый 12.09.2013, 17:24
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 8  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
По моему можно поменять алгоритм Z - сортировки немного: проверять и менять местами только объект героя и конкретное дерево, а не все объекты друг с другом.

Цитата:
Либо использовать стабильную сортировку (написать ее руками).
Можно просто предоставить другую функцию сортировки, которая проверят и Y и X объекта

Код AS3:
	objects.sort(myLittleZSorter);
	var i:int = objects.length;
	while (i--) {
		var childIndex:int = getChildIndex(objects[i]);
		if (childIndex != i) {
			setChildIndex(objects[i], i);
		}
	}
 
	...
	private function myLittleZSorter(a: Object, b: Object): int {
		if (a.y > b.y) {
			return 1;
		} else if (a.y < b.y) {
			return -1;
		} else if (a.x > b.x) {
			return 1;
		} else {
			return -1;
		}
	}
Тогда при сортировке не будут скакать элементы с одинаковым УГРИКОМ

Старый 12.09.2013, 19:03
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Разница, как раз таки есть
Да нет же, нет разницы! Я клоню к тому, что сортировку вообще можно и не делать для того когда, что был приведен. А вот в прикрепленном файле видно, как она будет работать если ее через таймер гонять - так причем тут первый код?* В нем как раз нет разницы, что написать, будет статическая картинка и все, пускай и не перетасованная, дело то не в этом.

P.s. - все там stable
__________________
Марк Tween

Старый 13.09.2013, 01:15
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Вроде как for each не обещает правильный порядок следования
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.