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

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

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

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

Собственно как то давно создавал похожую тему, просто щас конкретно допер где глюк.

Задача : есть допустим 100 спрайтов, разной высоты, они помещаются в контейнер таким образом, что если общая высота спрайтов превышает контейнер, то спрайты переносятся на след страницу ( но не наглядно, а в памяти так сказать ).

Как считал кол-во страниц :

Код AS3:
private function getListCount():Number {
 
			var h:int = 0;
			var h1:int = _stage.stageHeight - _mainContainer.y;
 
			for (var i:int = 0; i < _eVector.length; i++) {
 
				if (i) h += _eVector[i].height + 15;
				else   h += _eVector[i].height;
			}
 
			var lists:Number = h / h1;
 
			if (lists < 0) lists = 1;
			else if ( int(lists) < lists ) lists = int(lists) + 1;
 
			return lists;
		}
Считало поидее верно, но есть нюанс о котором я не знал до этого :
Допустим на первой странице поместилось 3 спрайта, а 4 спрайт очень большой и занял всю вторую страницу, на 3й странице появился маленький спрайт, но фишка в том, что этот маленький спрайт совершенно легко мог быть помещен на 1 страницу в свободное место, поэтому такая система считает, что страниц всего 2, а не 3.
Вот думаю как лучше решить, наверное стоит сначала сортировать вектор по мин > макс высоте , а потом только прогонять в цикле. или есть лучше решение?
__________________
Марк Tween

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Где-то была тема по наиболее оптимальному заполнению прямоугольной области фигурами. Там это было необходимо для текстурирования, и там давали ссылки на алгоритмы. Думаю это должно помочь.

Upd. а вообще можно так реализовать
из массива значений берем максимальное, если место осталось - перебираем максимальное из подходящих и так далее. А при переходе на новую страницу просто page++.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!


Последний раз редактировалось TanaTiX; 23.01.2012 в 15:42.
Старый 23.01.2012, 15:41
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 3  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
может лучше считать листы при их формировании а не отдельной функцией?

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

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

TanaTiX - а разве вариант сортировки не поможет, как я предложил?
__________________
Марк Tween

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Сортировка не спасет.

Например есть спрайты с размерами:
5
4
3
2

Отсортированные.
Размер страницы восемь.
Туда влезет 5 + 3, но не 5+4. В итоге упрешься в то же что у тебя сейчас.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Наверное немного не так
сортируем 2,3,4,5 размер 8.
страница 1 : 2 + 3
страница 2 : 4 ( ибо 4 + 5 не выйдет, а 2 и 3 уже просчитано )
страница 3: 5
все четко
__________________
Марк Tween

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
В зависимости от количества элементов, разница между реальностью и расчетным количеством может накапливаться. Поэтому лучше это делать при построении страниц. К тому же алгоритм практически одинаков.

Добавлено через 23 минуты
Наверняка не самый лучший вариант, но на скорую руку...
Код AS3:
var h:int = 8;
var arr = [2,4,5,3];
var list:int=0;
arr.sort(Array.DESCENDING);
getList();
function getList():void{
	if(arr.length==0){
		trace("length", list);
		return;
	}
	if(arr[0]>h){
		list++;
		arr.shift();
	}else{
		if(arr.length==2){
			arr.pop();
		}else{
			if(arr.length>1){
				for(var i:int=arr.length - 1; i>1; i--){
					if(arr[0]+arr[i]==h || (arr[0]+arr[i]>h && i!=arr.length - 1)){
						arr.splice(i, 1);
						break;
					}
				}
			}
		}
		arr.shift();
		list++;
	}
	getList();
}
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Задача о рюкзаке?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
TanaTiX да, алгоритм тяжелый получился если лучше не придумаю придется наверное так
__________________
Марк Tween

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Цитата:
алгоритм тяжелый получился
При желании можно и без рекурсии одним проходом. Допиливать наверняка есть что. Но по сути будет тоже самое. В плане производительности нужно иметь хотя бы альтернативу для сравнения.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

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

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


 


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


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