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

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

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

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ
Question как сделать сортировку через swapDepth

Допустим есть обекты каждый со своей глубиной _z:
obj1._z=30 getDepth=1
obj2._z=10 getDepth=2
obj3._z=20 getDepth=3

Через sortOn я сортирую их по глубине _z. Получаю такое:
obj2._z=10 getDepth=2
obj3._z=20 getDepth=3
obj1._z=30 getDepth=1

А как мне используя только swapDepth расставить их по нужным уровням? Тоесть чтобы в результате на сцене получилось так:
obj2._z=10 getDepth=1
obj3._z=20 getDepth=2
obj1._z=30 getDepth=3

Если бы был метод setDepth то проблем бы не было Подскажите, пожалуйста, алгоритм.
__________________
Он манэ падмэ ХУМ!

Старый 21.01.2009, 18:52
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Если объекты - клипы, то и менять их глубину с помощью swapDepth(depth). Если не клипы - поместить их в клипы.

Старый 22.01.2009, 13:35
ВАРАН вне форума Посмотреть профиль Отправить личное сообщение для ВАРАН Найти все сообщения от ВАРАН
  № 3  
Ответить с цитированием
ВАРАН
 
Аватар для ВАРАН

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ
Это понятно что менять глубину. Но глубину надо изменять меняя клипы местами, а не назначая им глубину напрямую. Сталобыть на до как то хитро их перетасовать что бы они выстроились как в третьем примере.
__________________
Он манэ падмэ ХУМ!

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Код AS1/AS2:
var tempMc:MovieClip =  getInstanceAtDepth(1);
obj2.swapDepths(tempMc);
Или я опять неправильно понял?

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

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ

Да знаю я как клипы местами менять Так ведь их нельзя просто нашару поменять все. Представь что их не 3 а 200. И у всех разная глубина. Нужен определенный алгоритм сортировки чтобы все их перестроить и не один не потерять. Это как большие пятнашки.

Добавлено через 1 час 34 минуты
Попробую сам дотумкать.
делаем асоциативный массив в который заносим имена всех наших мувиков, и их величину _z. Чтобы они были доступны вот так:
объект=my_array[i].obj
величина _z=my_array[i]._z


Код AS1/AS2:
//затем сортируем массив по этой величине _z
my_array.sortOn(["_z"],Array.NUMERIC);
 
//далее играем в пятнашки
	do {
		r = 0;
                      //бежим по всем элементам
		for (var i = 0; i<my_array.length; i++) {
                                  //получаем реальную глубину ролика
			var depth = my_array[i].obj.getDepth();
                                 //если глубина не совпадает с порядковым номером в массиве свапим ролик на свое место
			if (i<>depth) {
				my_array[i].obj.swapDepths(my_array[depth].obj);
			} else {
				r++;
			}
		}
	} while (r<my_array[i].length-2);
На небольших массивах работает отлично. А вот на больших... неочень. Пропускает некоторые элементы. Видимо алгоритм все равно не тот.
__________________
Он манэ падмэ ХУМ!

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Я делал это почти так же. Только параллельными массивами, а не ассоциативным.
Идея в том, что есть 2 массива - в одном _z, в другом имена клипов(ну или id, или просто ссылки на клипы)
Так вот, сортируем массив с _z-ами, после чего с помощью
Код AS1/AS2:
Array.RETURNINDEXEDARRAY
получаем, элемент с каким ИЗНАЧАЛЬНЫМ номером в массиве стоит на каком месте ТЕПЕРЬ
И ровно на эти же места (глубины) помещаем наши клипы из 2-ого массива
__________________
...вселенская грусть

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
А так если:
Код AS1/AS2:
my_array.sortOn(["_z"],Array.NUMERIC);
for (var i:Number = 0; i < my_array.length; i ++) {
   var tempMc:MovieClip =  this.getInstanceAtDepth(i);
   if(tempMc){
      my_array[i].swapDepths(tempMc);
   } else {
      my_array[i].swapDepths(i);
   }
}

Старый 23.01.2009, 12:08
ВАРАН вне форума Посмотреть профиль Отправить личное сообщение для ВАРАН Найти все сообщения от ВАРАН
  № 8  
Ответить с цитированием
ВАРАН
 
Аватар для ВАРАН

Регистрация: Aug 2003
Адрес: Москва
Сообщений: 449
Отправить сообщение для ВАРАН с помощью ICQ
Ан нет. Вычистил свои другие скрипты и оказалось что мой метод работает очень даже хорошо.
__________________
Он манэ падмэ ХУМ!

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

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

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


 


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


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