Форум 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=135681)

imdogma 29.01.2010 03:15

Выстроить элементы в контейнере как сетку
 
Мне жутко стыдно спрашивать такие банальные вещи, но толи от того что уже поздно и голова не соображает, толи еще по каким то причинам никак не могу понять, как правильно решить такую задачу:
- есть контейнер, в котором друг на друга навалены чайлды (в моем случии иконки, все с одинаковой длиной и шириной). нужно перестроить их в сетку. Как это сделать то?
Я так думаю нужно сначала циклом пройтись по контейнеру, собрать их все в массив, а потом этот массив както через пару for-лупов отстроить в виде сетки. Если не трудно, киньте плз код.
Еще раз сори за банальные вопросы :wacko:

proxiServer 29.01.2010 10:29

Все правильно понимаете. Можно так как вы написали. Правда можно не собирать их в массив и цикл сделать один.

1) Задайте начальную позицию.
2) Делаете цикл по всем элементам.
3) На каждой итерации устанавливайте текущему элементу текущую позицию.
4) На каждой итерации меняйте в конце итерации текущие координаты, что бы элементы не накладывались друг на друга. Что бы строку менять следите за счетчиком. Если,например, у вас 5 элементов в строке, то каждые пять итераций скидывайте значение текущей позиции по x на ноль. А значение y увеличивайте на высоту элемента плюс отступ.

tikhop 29.01.2010 10:34

вот:

Код AS3:

package {
        import flash.display.Sprite;
 
        public class Main extends Sprite
        {
                public static const H_SPACE:Number = 1; //промежуток между объектами по горизонтали
                public static const V_SPACE:Number = 1; //промежуток между объектами по вертикали
 
                public static const NUM_OF_H_SPRITE:Number = 10; //кол-во объектов по горизонтали
                public static const NUM_OF_V_SPRITE:Number = 10; //кол-во объектов по вертикали
 
                public static const SORT_MODE:Number = 1 // 0 or 1; 1 = horizontall sort, 0 = verticall sort
 
                public function Main()
                {
                        var spriteArray:Array = [];
                        var countOfSprite:uint = 30;
                        var sprite:Sprite;
 
                        var i:uint = 0;
                        //Create sprite
                        for (i; i<countOfSprite; i++)
                        {
                                sprite = new Sprite();
 
                                sprite.graphics.beginFill(0);
                                sprite.graphics.drawRect(0, 0, 10, 5);
                                sprite.graphics.endFill();
 
                                spriteArray.push(sprite);
                        }
 
                        i = 0;
 
                        for(i; i<countOfSprite; i++)
                        {
                                sprite = spriteArray[i] as Sprite;
 
                                if(SORT_MODE)
                                {
                                        sprite.x = i % NUM_OF_H_SPRITE * (sprite.width + H_SPACE);
                                        sprite.y = Math.floor(i/NUM_OF_H_SPRITE) * (sprite.height + V_SPACE);
                                }else{
                                        sprite.x = Math.floor(i/NUM_OF_V_SPRITE) * (sprite.width + H_SPACE);
                                        sprite.y = i % NUM_OF_V_SPRITE * (sprite.height + V_SPACE);
                                }
 
                                addChild(sprite);
                        }
                }
        }
}

P.S. может есть более лучший способ сортировать по сетке объекты, с радостью бы увидил...

mayakwd 29.01.2010 10:37

Код 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;
}


imdogma 29.01.2010 13:50

Спасибо друзья, разобрался


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

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