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

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

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

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Question Как сделать связь между Y и ChildIndex мувиклипа? (Z-последовательность) #Решено

Всем привет! Помогите кому не лень)

Есть массив с клипами которые добавляются поочередно и также по ходу дела могут быть удалены. Мне же нужно что бы было так: чем больше у клипа Y тем меньше его позиция индекса в списке дочерних элементов относительно всех остальных клипов в массиве.

Как это реализовать?

#Решено! Спасибо callme

Код AS3:
 
addChild(clip);
plant_arr.push(clip);
 
clip_arr.sortOn("y", Array.NUMERIC); 
 
for (var i:int = 0; i < clip_arr.length; i++) 
{
	addChild(clip_arr[i]);
}
Если же у нас имеется вместо Array - Vector, в котором есть только .sort() можем написать свою сортировку:

Код AS3:
			vector.sort(sorter);  
 
			function sorter(a:T, b:T):Number 
			{
				if(a > b) {
					return 1;
				}
				else if(a < b) {
					return -1;
				}
				else {
					return 0;
				}
			}


Последний раз редактировалось zCHESNOKz; 23.12.2015 в 23:43.
Старый 02.12.2015, 14:54
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Если массив имеется ввиду обычный массив или вектор, то у них есть метод sort, куда можно передать нужную функцию для сортировки.
Если надо сортировать детей DisplayObjectContainer, то придётся написать алгоритм сортировки самостоятельно. Пригодится метод swapChildrenAt.
__________________
Дети не должны знать о своих родителях

Старый 02.12.2015, 19:33
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 3  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от Tails Посмотреть сообщение
Если массив имеется ввиду обычный массив или вектор, то у них есть метод sort, куда можно передать нужную функцию для сортировки.
Если надо сортировать детей DisplayObjectContainer, то придётся написать алгоритм сортировки самостоятельно. Пригодится метод swapChildrenAt.
сортировка клипов: чем больше у клипа Y тем выше он в списке отображения.

только как?(


Последний раз редактировалось zCHESNOKz; 02.12.2015 в 20:25.
Старый 02.12.2015, 22:49
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 4  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Код AS3:
var clips:Array = new Array();
 
var clip1:MovieClip = new MovieClip();
clip1.y = 10;
 
var clip2:MovieClip = new MovieClip();
clip2.y = 70;
 
var clip3:MovieClip = new MovieClip();
clip3.y = 50;
 
clips.push(clip1);
clips.push(clip2);
clips.push(clip3);
 
clips.sortOn('y', Array.NUMERIC);
 
for (var i:int = 0; i < clips.length; i++) 
{
    addChild(clips[i]);
}

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
callme,
Скорее всего, человеку нужно сортировать динамический список отображения, поэтому такой хитрый план с отдельным массивом не подойдёт.

zCHESNOKz,
Вам просто нужно обойти список отображения особым способом. То есть, используя один из алгоритмов сортировок. Готового решения у меня нету.
__________________
Дети не должны знать о своих родителях

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Скорее всего, человеку нужно сортировать динамический список отображения, поэтому такой хитрый план с отдельным массивом не подойдёт.
Ну а что мешает обойти список и затолкать все в массив? А лучше вообще у контейнера, в который все это складывается, переопределить addChild / removeChild и добавлять / удалять всех детей стразу в массив сортировки

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Так и думал, что просто так от этого "лёгкого пути" не откажутся.
Список отображения уже является массивом. Зачем плодить ещё? Всё это будут костыли только ради использования нативного sort. Так код усложнится, потребление памяти и цп вырастет.

Правильным решением будет написать всего одну функцию, в которой реализовать подходящий алгоритм сортировки, с минимальными ресурсозатратами. Она потом на всю жизнь пригодится.
__________________
Дети не должны знать о своих родителях

Старый 03.12.2015, 10:40
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 8  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от Tails Посмотреть сообщение
callme,
Скорее всего, человеку нужно сортировать динамический список отображения, поэтому такой хитрый план с отдельным массивом не подойдёт.

zCHESNOKz,
Вам просто нужно обойти список отображения особым способом. То есть, используя один из алгоритмов сортировок. Готового решения у меня нету.
Именно, вы меня как раз таки поняли.

Это получается как в изометрии. Или там как то проще все считается?

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
В изометрии ещё бывает, что к y прибавляют x. То есть сортируется как: 1.x + 1.y > 2.x + 2.y Это нужно для того, чтоб объекты стоящие на одинаковой y не "скакали" в списке отображения.

В играх код никогда не был простым.
Самое простое решение это сортировать элементы "каждый с каждым". Но понятное дело, что с такой сортировкой вы сможете показать на экране совсем не много объектов, перед тем как приложение начнёт фризить и виснуть. Поэтому, я дал вам ссылку на вики, где описываются различные алгоритмы сортировок. Нужно прочитать, изучить, выбрать самый оптимальный вариант под свои конкретные нужды и реализовать.
__________________
Дети не должны знать о своих родителях

Старый 03.12.2015, 10:53
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 10  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от callme Посмотреть сообщение
Код AS3:
var clips:Array = new Array();
 
var clip1:MovieClip = new MovieClip();
clip1.y = 10;
 
var clip2:MovieClip = new MovieClip();
clip2.y = 70;
 
var clip3:MovieClip = new MovieClip();
clip3.y = 50;
 
clips.push(clip1);
clips.push(clip2);
clips.push(clip3);
 
clips.sortOn('y', Array.NUMERIC);
 
for (var i:int = 0; i < clips.length; i++) 
{
    addChild(clips[i]);
}

Я понял. Я тоже сортировал массив по 'y'. А дальше, как относительно положения в (отсортированном) массиве расположить графические объекты с нужным положением глубины отображения?

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

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

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


 


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


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