Форум 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:53
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 5  
Ответить с цитированием
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'. А дальше, как относительно положения в (отсортированном) массиве расположить графические объекты с нужным положением глубины отображения?

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

Регистрация: Dec 2014
Сообщений: 312
Цитата:
Сообщение от zCHESNOKz Посмотреть сообщение
Я понял. Я тоже сортировал массив по 'y'. А дальше, как относительно положения в (отсортированном) массиве расположить графические объекты с нужным положением глубины отображения?

Каждый раз после сортировки надо выполнять вот этот код:
Код AS3:
for (var i:int = 0; i < clips.length; i++) 
{
    addChild(clips[i]);
}

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

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от callme Посмотреть сообщение
Каждый раз после сортировки надо выполнять вот этот код:
Код AS3:
for (var i:int = 0; i < clips.length; i++) 
{
    addChild(clips[i]);
}
Тоже мелькало в голове. Большое спасибо это именно то что мне нужно было)

И в правду, насколько это будет пагубно влиять на производительность? Если допустим объектов будит до 30, не говорю уже больше 100. А можно ли это использовать в изометрии? Там ведь тоже много объектов. Или в изометрии все как то иначе?


Последний раз редактировалось zCHESNOKz; 04.12.2015 в 11:49.
Старый 03.12.2015, 10:15
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 8  
Ответить с цитированием
Tails
 
Аватар для Tails

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

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

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

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

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

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

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

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

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

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

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


 


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


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