![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Собственно проблема в том, что при нечетном количестве ячеек визуализация - правильная, а если конечная сумма ячеек - число четное, тогда не правильная. Вот пример кода (построение ячеек):
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; } }
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
|
Поставьте в начало внешнего цикла, если не важно чтобы поле cell.BB было различно для каждой ячейки:
А если важно, введите локальную переменную blackOrWhiteLocal и проверяйте ее в строчке: И ей же присваивайте остаток от деления i на два в начале внешнего цикла. |
|
|||||
|
Modus ponens
|
Ну так вы же в одном случае получаете четное количество колонок, а в другом - нечетное. Естесственно, что так работать не будет. Но можно сделать даже и в одном цикле.
Самым простым будет проверять четное ли количество колонок, или нет, и исходя из этого либо начинать каждую следующюю строку с такого-же элемента, или нет. Есть и другие универсальные решения, например, создавать по 4 квадратика сразу, а если не влезает, то только два. Можно создавать "змеевиком" т.е. последовательно создавать черный/белый, и укладывать их с права на лево а потом с лева на право, и так пока не закончится. Можно использовать функцию Кантора, которая заполняет таблицу по все увеличивающейся диагонали т.е. в таком порядке: в таком случае, каждый раз, как меняется направление, нужно менять цвет.
__________________
Hell is the possibility of sanity |
|
|||||
|
что то я вообще запутался и не могу понять как это сделать ...
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
|
легко
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; } } } |
|
|||||
|
caseyryan спасибо, вот уж действительно просто, даже не думал, что настолько
![]()
__________________
Не стыдно спросить, стыдно не знать ! |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|