Страница 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
Ок, раз мы друг друга не понимаем на словах, давайте попробуем поговорить кодом :D
Например в своих алгоритмах я строю сетку примерно так:

Код: Выделить всё

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, ну доступ то к объекту по его свойству все равно не получишь. В этом есть смысл только для графического вывода. Я же имею ввиду именно внутреннюю логику, у меня сетка графического представления не имеет.