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

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

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

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Arrow Вывод квадратов циклом построчно

Мне надо вывести динамическое количество квадратом статических длины и ширины на экран. Так как они могут не вмещаться в экран, их надо распределить по строкам. В каждой строке, например, по 3 квадрата.

Было бы просто, если бы можно было использовать двойной цикл, но в квадраты мне надо записывать число счетчика, переменной i.

Я написал такой код, но не думаю, что он хорош, как его можно улучшить и какие решения лучше?

Код AS3:
			var j:int = 0, counter:uint = 0, currentMax:uint = 2;
 
			for (var i:uint = 0; i < 20; i++ )
			{
				var square:MySquare = new MySquare(String(i) );
 
				square.x = j * (400 + 10);
				square.y = counter * (200 + 10);
				addChild(square);
 
				if (i >= currentMax){ currentMax += 3; counter++; j = -1; }
			}
В таком случае все получается правильно. Если элементов больше, они просто сходят на нижнюю строчку. Но я чувствую, что решение глупое.
__________________
Humanity.push(new Man());

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
for(var i:uint = 0;i<20;i++)
                {
                    var x:int = 200 * (i % 5);
                    var y:int = 200 * Math.floor(i / 5);
                }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 16.09.2011, 16:04
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Как должны располагаться квадраты в итоге?
Здесь двойной цикл - легко прокатит.
Можно ввести дополнительную переменную, которую увеличивать на 1 во втором цикле и записывать ее значение в этот квадрат вместо i


п.с. Если постите вопрос на публичном форуме, не надо писать все переменные и разные операции в одну строку
Код AS3:
var j:int = 0, counter:uint = 0, currentMax:uint = 2;
это затрудняет чтение.

Старый 16.09.2011, 16:05
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 4  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Что-то вообще не то)

Добавлено через 1 минуту
goodguy, надо чтобы квадраты в виде клетки.
__________________
Humanity.push(new Man());

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

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
А что тут не то?

Код AS3:
for(var i:uint = 0;i<20;i++)//20 - кол-во квадратов
                {
                    var square:MySquare = new MySquare(String(i) );
                    square.x = (400 + 10) * (i % 5); // 5 - кол-во рядов квадратов
                    square.y = (200 + 10) * Math.floor(i / 4); // 4 - кол-во квадратов в ряду
                    addChild(square);
                }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 16.09.2011, 16:15
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Код AS3:
package  {
	import flash.display.Sprite;
 
	public class Squares extends Sprite {
 
		public function Squares() {
 
			var increment:int = 0;
			for (var i:int = 0; i < 4; i++) {
				for (var j:int = 0; j <  5; j++) {
					var s:Square = new Square(increment);
					s.x = i * s.width;
					s.y = j * s.height;
					addChild(s);
					increment ++;
				}
			}
		}	
	}
}
 
import flash.text.TextField;
 
internal class Square extends flash.display.Sprite {
 
	public function Square(number:int) {
		graphics.beginFill(100000000 * Math.random(), 1);
		graphics.drawRect(0, 0, 100, 100);
		graphics.endFill();
		var tf:TextField = new TextField();
		tf.autoSize = "left";
		tf.text = String(number);
		addChild(tf);
	}
	override public function get width():Number {
		return 100;
	}
	override public function get height():Number {
		return 100;
	}
}
Вот, сделал простой пример с двойным циклом

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

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Огромное спасибо, очень помогли!
__________________
Humanity.push(new Man());

Старый 16.09.2011, 16:21
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 8  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
Brick.as
Код AS3:
package {
import flash.display.*;	
import flash.text.*;
 
	public class Brick extends Sprite {
		public var container:Sprite = new Sprite();
		public var bg_brick:Sprite=new Sprite();
 
		public function Brick(str:String) {
			addChild(container);
			draw_brick_1(str);
		}
 
		public function draw_brick_1(st:String):void {
			bg_brick.graphics.lineStyle(1,0xFF00FF);
			bg_brick.graphics.drawRect(0,0,15,15);
			container.addChild(bg_brick);
			var txt:TextField=new TextField();
			bg_brick.addChild(txt);
			txt.width=15;
			txt.text =(String(st));
		}
 
	}
Остальное:
Код AS3:
import Brick;
 
var ar:Array=new Array();
 
ar = [[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]];
 
for (var i:Number=1;i<ar.length;i++) {
	for (var ii:Number=1;ii<ar.length;ii++) {
	var b:Brick=new Brick(String(i));
	b.x+=b.width*i;
	b.y+=b.height*ii;
	addChild(b);
	}
}

Старый 16.09.2011, 16:35
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 9  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Какой треш!
Код AS3:
for (var i:Number=1;i<ar.length;i++) 
	for (var ii:Number=1;ii<ar.length;ii++) 
//Кол-во операций будет pow(ar.length , 2) !
Добавлено через 48 секунд
Код AS3:
var b:Brick=new Brick(String(i)); // и будет по 20 одинаковых Brick
Добавлено через 1 минуту
Зачем тут вообще массив...?
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 16.09.2011, 16:39
Lyso вне форума Посмотреть профиль Отправить личное сообщение для Lyso Посетить домашнюю страницу Lyso Найти все сообщения от Lyso
  № 10  
Ответить с цитированием
Lyso

Регистрация: Sep 2010
Адрес: Красноярск
Сообщений: 217
Отправить сообщение для Lyso с помощью Skype™
Остался лишь один вопрос - если у меня количество квадратов динамическое, как я могу задать параметры для цикла?
__________________
Humanity.push(new Man());

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

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

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


 


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


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