Страница 4 из 7
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 07:18
Alazaur
sanych_dv, ну так вроде только я тут задавал вопросы по теме массивов))) Ну раз вы здесь может заодно и мне ответите? Я просто не понимаю, в чем смысл строить сетку основанную на одномерном массиве, если она впоследствии никуда не пригодна. Просто ради того чтоб была сетка?
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 07:45
sanych_dv
Я не оперирую категориями "одномерный массив", "многомерный массив". Любое значение в паре "ключ => значение" при необходимости должно иметь возможность быть расширенным новым свойством или методом.
В коде
Код: Выделить всё
... fields[i] = new Field(i % 3, Math.floor(i / 3), i);...
fields не является никаким одномерным массивом, поскольку каждое его значение является новым экземпляром класса Field с уже измененным свойством id. И никаких проблем доступа к нужным свойствам и методам класса Field через ссылки ОБЪЕКТА fields не существует. А уж какой это будет объект - с именованными ключами или нет, как будут использоваться свойства и методы экземпляров класса - вопрос удобства дальнейшей работы.
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:02
Alazaur
Ок, раз мы друг друга не понимаем на словах, давайте попробуем поговорить кодом
Например в своих алгоритмах я строю сетку примерно так:
Код: Выделить всё
var grid:Vector.<Vector.<Node>> = new Vector.<Vector.<Node>>;for (var i:int = 0; i < 100; i++) { grid[i] = new Vector.<Node>; for (var j:int = 0; j < 100; j++) { grid[i][j] = new Node(i, j); }}
Теперь если мне надо к примеру проверить клетки стоящие рядом с текущей я могу написать так:
Код: Выделить всё
for (var i:int = current.i - 1; i <= current.i + 1; i++) { for (var j:int = current.j - 1; j <= current.j + 1; j++) { // }}
Вопрос как сделать такое же вот с таким:
sanych_dv писал(а):
Код: Выделить всё
private var _loc:Object = {};//... for (var i:int = 0; i < 9; i++){_loc["mc" + i] = new MovieClip;_loc["mc" + i].i = i; // задаем идентификацию клипу_loc["mc" + i].x = _loc["mc" + i].width * ( i % 3 );_loc["mc" + i].y = _loc["mc" + i].height * Math.floor( i / 3 );_loc["mc" + i].addEventListener(MouseEvent.CLICK , onClick); addChild(_loc["mc" + i]);}
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:12
Alazaur
Суть вобщем в том, что хочу узнать возможно ли с тем же успехом использовать предложенный вами в этой теме способ построения сетки. Если можно то я бы просто потестил, а не быстрее ли оно будет. И подправил бы свои алгоритмы.
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:14
sanych_dv
Ну и работайте с тем же оператором модуля дальше:
Код: Выделить всё
for (var i:int = 0; i < 9; i++){trace(i % 3, Math.floor( i / 3 ));}
у вас и будет номер клетки по горизонтали и вертикали.
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:20
Alazaur
sanych_dv, а по диагонали?
UPD: Можете не отвечать я понял)))
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:23
sanych_dv
"По кругу, по квадрату, по дрожащим желтым пальцам,
По закону сохранения остатков непонятной красоты." )
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:29
Alazaur
Ну через модули точно не будет быстрее.))) Оставлю значит так как у меня и было. Вобщем это я и хотел узнать. Но тема как-то затянулась.
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:33
sanych_dv
Да можно и в самом начале сохранять положение клеток в свойствах клипа:
Код: Выделить всё
..._loc["mc" + i] = new MovieClip;_loc["mc" + i].xPos = i % 3; _loc["mc" + i].yPos = Math.floor( i / 3 ); // или в одном объекте, как удобнее...
Re: Criss-Cross или научите быть не быдло кодером
Добавлено: 07 дек 2012, 08:41
Alazaur
sanych_dv, ну доступ то к объекту по его свойству все равно не получишь. В этом есть смысл только для графического вывода. Я же имею ввиду именно внутреннюю логику, у меня сетка графического представления не имеет.