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

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

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

Регистрация: Apr 2009
Сообщений: 78
По умолчанию Выстроить элементы в контейнере как сетку

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

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

Регистрация: Jun 2006
Сообщений: 400
Все правильно понимаете. Можно так как вы написали. Правда можно не собирать их в массив и цикл сделать один.

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

Старый 29.01.2010, 10:34
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 3  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
вот:

Код 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. может есть более лучший способ сортировать по сетке объекты, с радостью бы увидил...

Старый 29.01.2010, 10:37
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 4  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Код 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;
}
__________________
Блог, Twitter
Брюзга.

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

Регистрация: Apr 2009
Сообщений: 78
Спасибо друзья, разобрался

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

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

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


 


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


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