|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Правильное размещение нескольких объектов произвольной формы в цикле
Добрый вечер. Возникла небольшая проблема. Никак не могу сообразить, как в цикле разместить несколько объектов произвольной формы.
Если размер объектов одинаковый - то всё понятно - просто записываю след. образом: Но если объекты начинают изменяться в размере, получается неправильное позиционирование. Пробовал решить это через создание доп. переменной previousWidth. for(var i:uint; i< 4; i++) { obj_mc = new Obj(); if(align == "left") { obj_mc.width = Math.random() * obj_mc.width/2 + obj_mc.width/2; //obj_mc.height = Math.random() * obj_mc.height/2 + obj_mc.height/2; obj_mc.x = (previousWidth + 5) * columnNum; obj_mc.y = (previousHeight + 5) * rowNum; if(obj_mc.x < bg_mc.width - obj_mc.width*2) { columnNum ++; } else { columnNum = 0; rowNum++; } trace(obj_mc.x); trace("previousWidth " + previousWidth); addChild(obj_mc); previousWidth += obj_mc.width; previousHeight += obj_mc.height; |
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Если есть возможность, то складывайте объекты в контейнер, и перед добавлением нового узнавайте ширину контейнера.
|
|
|||||
а что если нужна не одна, а несколько линий. Идея в следующем: есть ряд геометрических объектов, которые создаются по параметрам из xml. Т.е. объекты всегда могут быть разными и в разном кол-ве. Они при создании должны помещаться в контейнер, в котором соответственно правильно расставляться, не налезать на друг друга. Если места для объекта не хватает - перескакивать на новую строку и т.д.
|
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Не понял о каких линиях идет речь. Код покажите, или скажите что делаете конкретно.
|
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
похоже что автора затронула тема заполнение вещей разной площади в инвентаре
пока всё что приходит в голову это var bigWidth = 0; var bigHeight = 0; var allHeight = 0; for (var i:uint; i< 50; i++) { var obj_mc = new Obj(); obj_mc.width = Math.random() * obj_mc.width / 2 + obj_mc.width / 2; obj_mc.height = Math.random() * obj_mc.height / 2 + obj_mc.height / 2; if (bigWidth + obj_mc.width < bg_mc.width) { obj_mc.x = bigWidth; obj_mc.y = allHeight; if(bigHeight<obj_mc.height){ bigHeight = obj_mc.height; } bigWidth += obj_mc.width; }else{ allHeight += bigHeight; obj_mc.x = 0; obj_mc.y = allHeight; bigWidth = obj_mc.width; bigHeight = obj_mc.height; } addChild(obj_mc); } Последний раз редактировалось kseniya; 07.03.2011 в 01:23. |
|
|||||
Недавно на работе решали подобную задачу:
- Условно разбили контейнер на ячейки (чем мельче ячейки тем мельче зазоры между объектами) - для каждого объекта добавленного в контейнер определяем занятые им ячейки и помечаем их как занятые - перед добавлением объекта ищем первую свободную ячейку, и исходя из размеров объекта расчитываем какую область он должен занять, бежим по ячейкам данной области и смотрим есть ли хоть одна несвободная, если нет то ок помещаем туда объект, иначе ищем следующую свободную и снова расчет... Думаю алгоритм понятен. |
Часовой пояс GMT +4, время: 02:29. |
|
« Предыдущая тема | Следующая тема » |
|
|