|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2012
Сообщений: 166
|
Заполнение элементов Массива массивов (изометрическая сетка)
Подскажите, каким образом можно правильно заполнить ячейки изометрической сетки (массива массивов) перетаскивая на нее объект определенного размера (1х6 и т.д.) как только я не пробовал это делать.
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; } } } } } } } } } }
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
В as3 не бывает двумерных массиов - бывают только массивы, содержащие другие массивы, и то это не массивы а хитрореализованные списки. Причём списки со свойствами хеш-таблиц. 2 в одном.
|
|
|||||
Любой линейный массив, соответственно струтурированный можно рассматривать как псевдо- 2-х, 3-х, n-мерный. Хотя по сути остается линейным (одномерным).
__________________
Кто хочет, тот ищет способ, а кто не хочет - тот ищет причину! |
|
|||||
Хотя я проглядел, у Вас вроде есть инициализация массива
Цитата:
Не, while(true) или do while(false) как только и для чего только не используют и оно бывает к месту. Но в этом конкретном случае мотивация непонятна. Если ещё не нашли ошибку, попробуйте запихнуть всё, что написали в один класс, который можно запустить отдельно от приложения. Тогда если не форумчанам, то Вам будет проще найти ошибку. |
|
|||||
Регистрация: May 2012
Сообщений: 166
|
Да конструкция кода слишком большая для такого простого действия, на мой взгляд, но за неимением альтернативы пришлось пойти на эту адскую фантасмагорию которую выдал мой мозг... Я подумал наверняка найдутся люди которые уже делали это и показали бы мне правильный вариант. Я опирался от ячейки на которую попадает курсор при нажатии if (grid[col][row] == e.target) далее нужно просто сделать проверку рядом находящихся ячеек на заполненность и заполнить если они свободны, попутно ставя туда изображение объекта. Только с этой частью кода у меня проблема.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
Регистрация: May 2012
Сообщений: 166
|
А как же проверять соседние ячейки не пробегаясь по циклу? Мне же нужно сканировать всю сетку на наличие свободных/занятых мест перед установкой объекта?
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
Modus ponens
|
Ищите в гугле / википедии по ключу fitting problem, их есть множесто разнообразных и разнообразных решений, но уж наверняка можно лучше, чем шесть вложенных циклов... Просто с таким кодом, пусть даже нормально оформленным не особенно можно разбираться, т.как кроме большой вложенности, есть всякие конструкции, которые выглядят на первый взгляд бессмысленными, как уже говорилось - безусловный выход из while на первой же итерации, или создание какого-то астрономического количества MovieClipов и моментального их уничтожения...
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 13:31. |
|
« Предыдущая тема | Следующая тема » |
|
|