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

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

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

Регистрация: May 2012
Сообщений: 166
По умолчанию Заполнение элементов Массива массивов (изометрическая сетка)

Подскажите, каким образом можно правильно заполнить ячейки изометрической сетки (массива массивов) перетаскивая на нее объект определенного размера (1х6 и т.д.) как только я не пробовал это делать.
Код AS3:
	public function Click(e:MouseEvent):void
	{
		if (! drag)
		{
			if (e.target == osel)
			{
				curX = 16;
				curY = 10;
				objectMass = new Array();
 
				for (var rows:int=0; rows<curX; rows++)
				{
					objectMass.push(new Array());
				}
				while (true)
				{
					var tempCont = new MovieClip();
					for (var col:int=0; col<curX; col++)
					{
						for (var row:int=0; row<curY; row++)
						{
							var ball2x2 = new ball2x2_mc  ;
							objectMass[col][row] = ball2x2;
							ball2x2.x = col * 24;
							ball2x2.y = row * 24;
							ball2x2.mouseEnabled = false;
							tempCont.addChild(ball2x2);
 
						}
					}
					break;
				}
				gameMovieClip.addChild(tempCont);
				targ = tempCont;
				targ.startDrag(true);
				targ.mouseEnabled = false;
				drag = true;
			}
			if (e.target == tile)
			{
				curX = 1;
				curY = 1;
				objectMass = new Array();
				for (rows=0; rows<1; rows++)
				{
					objectMass.push(new Array());
				}
				while (true)
				{
					tempCont = new MovieClip();
					for (col=0; col<1; col++)
					{
						for (row=0; row<1; row++)
						{
							ball2x2 = new ball2x2_mc  ;
							objectMass[col][row] = ball2x2;
							ball2x2.x = col * 24;
							ball2x2.y = row * 24;
							ball2x2.mouseEnabled = false;
							tempCont.addChild(ball2x2);
 
						}
					}
					break;
				}
				gameMovieClip.addChild(tempCont);
				targ = tempCont;
				targ.startDrag(true);
				targ.mouseEnabled = false;
				drag = true;
			}
		}
		else
		{
			var score:int = 0;
			for (col=0; col<slots; col++)
			{
				for (row=0; row<slots; row++)
				{
					if (grid[col][row] == e.target)
					{
						for (var cur1:int=0; cur1<curX; cur1++)
						{
							for (var cur2:int=0; cur2<curY; cur2++)
							{
								if (grid[col + cur1][row + cur2].full == false)
								{
									score++;
									if (curX >= curY)
									{
										if (score == curX)
										{
											targ.x = e.target.x;
											targ.y = e.target.y;
											targ.stopDrag();
											targ = new MovieClip();
											for (var cur3:int=0; cur3<curX; cur3++)
											{
												for (var cur4:int=0; cur4<curY; cur4++)
												{
													grid[col + cur3][row + cur4].full = true;
												}
											}
											drag = false;
										}
									}
									if (curX < curY)
									{
										if (score == curY)
										{
											targ.x = e.target.x;
											targ.y = e.target.y;
											targ.stopDrag();
											targ = new MovieClip();
											for (cur3=0; cur3<curX; cur3++)
											{
												for (cur4=0; cur4<curY; cur4++)
												{
													grid[col + cur3][row + cur4].full = true;
												}
											}
											drag = false;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 24.11.2012, 17:48
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Код AS3:
for (var col:int=0; col<curX; col++)
{
    objectMass[col] = [];// Надо массив для каждой колонки сделать
В as3 не бывает двумерных массиов - бывают только массивы, содержащие другие массивы, и то это не массивы а хитрореализованные списки. Причём списки со свойствами хеш-таблиц. 2 в одном.

Старый 24.11.2012, 18:07
Storfus13 вне форума Посмотреть профиль Отправить личное сообщение для Storfus13 Найти все сообщения от Storfus13
  № 3  
Ответить с цитированием
Storfus13
 
Аватар для Storfus13

Регистрация: Jan 2012
Сообщений: 26
Записей в блоге: 1
Любой линейный массив, соответственно струтурированный можно рассматривать как псевдо- 2-х, 3-х, n-мерный. Хотя по сути остается линейным (одномерным).
Код AS3:
mas = [[0xffcc99,0xffe8ce,0xffcc99], 
	 [0xff9900,0xfebc5a,0xc17402],
	 [0x8899bb,0xAABBDD,0x8899bb],
	 [0x00ff00,0x008800,0x005500], 
	 [0xABB9F3,0xffffcc,0xABB9F3],
	 [0x57fd8c,0xc7fed8,0x57fd8c]];
__________________
Кто хочет, тот ищет способ, а кто не хочет - тот ищет причину!

Старый 24.11.2012, 18:24
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Хотя я проглядел, у Вас вроде есть инициализация массива
Цитата:
objectMass.push(new Array());
Короче проблема х.з. где, учитывая такие конструкции:
Код AS3:
while (true)
				{
					...
					break;
				}
Не, while(true) или do while(false) как только и для чего только не используют и оно бывает к месту.
Но в этом конкретном случае мотивация непонятна.

Если ещё не нашли ошибку, попробуйте запихнуть всё, что написали в один класс, который можно запустить отдельно от приложения. Тогда если не форумчанам, то Вам будет проще найти ошибку.

Старый 24.11.2012, 18:46
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 5  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Да конструкция кода слишком большая для такого простого действия, на мой взгляд, но за неимением альтернативы пришлось пойти на эту адскую фантасмагорию которую выдал мой мозг... Я подумал наверняка найдутся люди которые уже делали это и показали бы мне правильный вариант. Я опирался от ячейки на которую попадает курсор при нажатии if (grid[col][row] == e.target) далее нужно просто сделать проверку рядом находящихся ячеек на заполненность и заполнить если они свободны, попутно ставя туда изображение объекта. Только с этой частью кода у меня проблема.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 24.11.2012, 19:00
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Для начала сохраните coll и row прямо на объекте по которому кликаете, чтобы не было этих пробежек в цикле.

Старый 24.11.2012, 19:45
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 7  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
А как же проверять соседние ячейки не пробегаясь по циклу? Мне же нужно сканировать всю сетку на наличие свободных/занятых мест перед установкой объекта?
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 24.11.2012, 19:56
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Я про определение coll и row по event.target
По остальному - ищите ошибку

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ищите в гугле / википедии по ключу fitting problem, их есть множесто разнообразных и разнообразных решений, но уж наверняка можно лучше, чем шесть вложенных циклов... Просто с таким кодом, пусть даже нормально оформленным не особенно можно разбираться, т.как кроме большой вложенности, есть всякие конструкции, которые выглядят на первый взгляд бессмысленными, как уже говорилось - безусловный выход из while на первой же итерации, или создание какого-то астрономического количества MovieClipов и моментального их уничтожения...
__________________
Hell is the possibility of sanity

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

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

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


 


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


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