Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Расположить элементы в виде "не стандартной сетки" (http://www.flasher.ru/forum/showthread.php?t=165658)

Art_133 25.08.2011 14:50

Расположить элементы в виде "не стандартной сетки"
 
Вложений: 1
Привет.
Подскажите, как разместить элементы в порядке, изображенном на картинке.

Могу разместить в виде стандартной сетки:
Код AS3:

private static const ICON_WIDTH : uint = 90;
private static const ICON_HEIGHT : uint = 90;
private static const COLUMNS_COUNT : uint = 5;
 
var childsCount : uint = iconsContainer.numChildren;
for (var i : uint = 0; i < childsCount; i++) {
  var child : DisplayObject = itemsContainer.getChildAt(i);
  child.x = (i % COLUMNS_COUNT) * ITEM_WIDTH;
  child.y = uint(i / COLUMNS_COUNT)  * ITEM_HEIGHT;
}

но как сделать такую, как на изображение не пойму.

Bgg 25.08.2011 14:58

Четные строки сдвигаете по x на ITEM_WIDTH.

Art_133 25.08.2011 15:03

Да, это понятно. Но сложность возникает в тот момент, когда чётная строка должна содержать на 1 элемент меньше.

СлаваRa 25.08.2011 15:21

Сдвиг на половину разности от: ширина "полной" - ширина "неполной" линии.

Art_133 25.08.2011 15:26

Со сдвигом всё понятно. Мне не совсем ясно, как перенести лишний элемент с чётной строки (ведь в чётной строке на 1 меньше) на новую строку, не чётную.

toFL 25.08.2011 15:47

Забейте массив, таким образом:
Код:

[1,0,1,0,1,0,1,0,1]
[0,1,0,1,0,1,0,1]
[1,0,1,0,1,0,1,0,1]
[0,1,0,1,0,1,0,1]
[1,0,1,0,1,0,1,0,1]


КорДум 25.08.2011 15:53

Если четное И i кратно 5, то continue; // пропускаем виток цикла

olexandr 25.08.2011 22:08

проверил - работает
Код AS3:

    var child:DisplayObject = itemsContainer.getChildAt(i);
 
    var _col:int = i % (COLUMNS_COUNT * 2 - 1) % COLUMNS_COUNT;
    var _row:int = i / (COLUMNS_COUNT - .5);
 
    child.x = _col * ITEM_WIDTH + (_row % 2 ? ITEM_WIDTH / 2 : 0);
    child.y = _row * ITEM_HEIGHT;


i.o. 26.08.2011 00:26

Код AS3:

(_row % 2 ? ITEM_WIDTH / 2 : 0)

можно заменить на
Код AS3:

0.5 * ITEM_WIDTH * (_row % 2)


TanaTiX 26.08.2011 00:58

i.o., 1 или 2 математических действия и сравнение против 3х математических действий. Я придираюсь, но не вижу смысла.


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

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