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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию поменять контейнеры местами.

Есть контейнер А в котором допустим 100 контейнеров класса B. Контейнеры располагаются вертикально друг за другом сверху вниз аля обычная вертикальная галлерея превьюшек.
Задача менять местами контейнеры , перемещая либо вверх либо вниз. Тоесть если мы двигаем например 2 контейнер вверх, то на его место ставится 1й , а 1й на место второго, если вниз то 2й на место 3его , 3й на место 2го.
Все бы просто сделать, если бы индексы контейнеров шли друг за другом, да и даже если так, после перемещения индексы все равно поменяются и будет структура например 1,33,2,98 и т.д.

Как поступить то ?
__________________
Марк Tween

Старый 23.10.2011, 22:26
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Тебе надо с анимацией? Аля эскизы в опере?
Я как-то делал подобное, если найду код, выложу
Хотя принцип то не сложный. Юзал карину твинер. Сами эскизы делал так, что точка отсчета располагалась по середине, т.е. хватаю один, тащу его поверх другого, во время перетаскивания постоянно происходит формирование массива на основе всех детей основного контейнера, и он тут же сортируется, если Y одного контейнера, становится меньше или больше другого, он естественно меняет индекс в массиве. При отпускании мыши, массив "фиксируется" и дальше циклом по нему пробегаюсь и добавляю к каждому контейнеру твинер, который и помещает их все на нужные позиции

Пример кода сортировки:
Код AS3:
private function sortChildren():void {
			try {
				var i:			int 		= _container.numChildren;
				var children:	Array      	= [];
				while (i--) {
					children.push(_container.getChildAt(i));
				}
				children.sortOn("y", Array.NUMERIC);
				i = children.length;
				while (i--) {
					if (getChildIndex(_container.children[i]) != i) {
			                          _container.setChildIndex(children[i], i);
		                                   }
				}
			} catch (e:Error) { trace(e.message + " " + this); }
		}


Последний раз редактировалось goodguy; 23.10.2011 в 22:34.
Старый 23.10.2011, 22:32
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Не не goodguy дорогой. Никакой анимации нету. никаких твинеров. Я не пойму как переставлять контейнеры местами , тоесть типа cont1.x = cont2.x , cont2.x = cont1.x - тоесть такой принцип, но как мне узнать какой предидущий а какой последующий контейнер, чтобы это сделать я не понимаю. ибо если смотреть по индексам чайлдов, то они могут быть не последовательны

Добавлено через 15 минут
goodguy ты гений, как я мог забыть про сортировку массивом по свойствам!!! это же офигенно. + тебе
__________________
Марк Tween

Старый 23.10.2011, 22:48
saikspaik вне форума Посмотреть профиль Отправить личное сообщение для saikspaik Найти все сообщения от saikspaik
  № 4  
Ответить с цитированием
saikspaik

Регистрация: Nov 2009
Сообщений: 300
По координатам?

Старый 23.10.2011, 22:55
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Я бы сделал так:
Помести все эти эскизы в вектор, ну или в простой массив, не суть. Зная ширину и высоту поля, занимаемого эскизом, условно поделил бы весь родительский контейнер на сектора.
Потом, при перетаскивании эскиза, расчитывал бы в каком по счете секторе он находится в данный момент.
Т.е. горизонтальный сектор - это высота основного поля, разделенная на количество эскизов по горизонтали, аналогично с вертикалью.
Скажем, если высота основного поля 750 пикселейи ширина 900, а высота и ширина одного эскиза 150, то для нахождения в каком ряду и колонке находится эскиз, можно заюзать подобный код:
Код AS3:
var totalRows:int = 750 / _thumbHeight; // 750 / 150 = 5
var totalCols:int = 900 / _thumbHeight; // 900 / 150 = 6
var vertRow:int = int(thumb.y / _thumbHeight); // допустим он на 355 / 150 = 2й ряд
var horRow:int = int(thumb.x / _thumbHeight); // 200 / 150 = 1 первая колонка
var index:int = (totalCols * vertRow - 1) + horRow; / /получаем индекс который теперь должен занимать этот эскиз в массиве.
А далее просто вырезал бы его с текущего индекса, и поместил на новый. После чего прогнал бы циклом по массиву и расставил все эскизы по своим местам

как=то так короче. Писал прямо тут, не тестировал ) так что если че, подправишь

Добавлено через 56 секунд
опоздал со вторым вариантом ) ну пофиг, пусть будет

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

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

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


 


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


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