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

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

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

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
По умолчанию Чередование ячеек (светлая - темная) как на шахматной доске. Странное поведение

Собственно проблема в том, что при нечетном количестве ячеек визуализация - правильная, а если конечная сумма ячеек - число четное, тогда не правильная. Вот пример кода (построение ячеек):

Код AS3:
for (var i:int = 0; i < endH; i++)
{
	cellVector[i] = new Vector.<Object>();
	for (var j:int = 0; j < endV; j++)
	{
		blackOrWhite ++;
 
		if (blackOrWhite %2 == 0)
		{
		        cell = new Cell(0);
 
		}else {
			cell = new Cell(1);
		}
 
		cell.BB = blackOrWhite;
		cell.mc.scaleX = nowScale;
		cell.mc.scaleY = nowScale;
		cell.x = 25+(i * cellSize*nowScale);
		cell.y = 25+(j * cellSize*nowScale);
		cell.H = i;
		cell.V = j;
		cell.addEventListener(MouseEvent.CLICK, setNumToCell);
		addChild(cell);
		cellVector[i][j] = cell;
	}
}
5 * 5 Строится как нужно, а вот 8 * 8, как видите - проблема. Подскажите как поступить?
Изображения
   
__________________
Не стыдно спросить, стыдно не знать !

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Поставьте в начало внешнего цикла, если не важно чтобы поле cell.BB было различно для каждой ячейки:
Код AS3:
for (var i:int = 0; i < endH; i++)
{
    blackOrWhite = i % 2;
    ...
}
А если важно, введите локальную переменную blackOrWhiteLocal и проверяйте ее в строчке:
Код AS3:
if (blackOrWhiteLocal % 2 == 0)
        cell = new Cell(0);
else
	cell = new Cell(1);
И ей же присваивайте остаток от деления i на два в начале внешнего цикла.

Старый 07.10.2012, 20:06
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну так вы же в одном случае получаете четное количество колонок, а в другом - нечетное. Естесственно, что так работать не будет. Но можно сделать даже и в одном цикле.
Самым простым будет проверять четное ли количество колонок, или нет, и исходя из этого либо начинать каждую следующюю строку с такого-же элемента, или нет. Есть и другие универсальные решения, например, создавать по 4 квадратика сразу, а если не влезает, то только два. Можно создавать "змеевиком" т.е. последовательно создавать черный/белый, и укладывать их с права на лево а потом с лева на право, и так пока не закончится. Можно использовать функцию Кантора, которая заполняет таблицу по все увеличивающейся диагонали т.е. в таком порядке:
Код:
↓ ↗ ↙ ↗
↗ ↙ ↗ ↙
↙ ↗ ↙ ↗
↗ ↙ ↗ ↓
в таком случае, каждый раз, как меняется направление, нужно менять цвет.
__________________
Hell is the possibility of sanity

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

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
что то я вообще запутался и не могу понять как это сделать ...
__________________
Не стыдно спросить, стыдно не знать !

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
легко
Код AS3:
package 
{
	import flash.display.Sprite;
 
	public class Main extends Sprite {
 
		private var _cols:	int 	= 10;
		private var _rows:	int 	= 8;
		private var _cellSide:	int 	= 30;
 
		public function Main() {
 
			for (var i:int = 0; i < _rows; i++) {
				for (var j:int = 0; j < _cols; j++) {
					var s:Sprite = ((i + j) % 2 == 0) ? getBlack() : getYellow(); // проверка ряда на четность
					s.x 	= j * s.width;
					s.y 	= i * s.height;
					addChild(s);
				}
			}
		}
		private function getBlack():Sprite {
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0x000000);
			s.graphics.drawRect(0, 0, _cellSide, _cellSide);
			s.graphics.endFill();
			return s;
		}
		private function getYellow():Sprite {
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0xFFFF80);
			s.graphics.drawRect(0, 0, _cellSide, _cellSide);
			s.graphics.endFill();
			return s;
		}
	}
}
нарисует сколько угодно колонок и рядов в шахматном порядке

Старый 07.10.2012, 22:43
mihael_p вне форума Посмотреть профиль Отправить личное сообщение для mihael_p Посетить домашнюю страницу mihael_p Найти все сообщения от mihael_p
  № 6  
Ответить с цитированием
mihael_p

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
caseyryan спасибо, вот уж действительно просто, даже не думал, что настолько
__________________
Не стыдно спросить, стыдно не знать !

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

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

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


 


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


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