Я создаю сетку шестиугольной формы, как описано на веб-сайте Амита Пателя redblobgames.com
Я проверил сетку, и все, включая координаты, правильно.
Теперь я хотел бы сохранить данные сетки в массив. Я частично разобрался, однако основная проблема в том, что некоторые столбцы начинаются с индекса 1 вместо 0.
Поэтому я хотел бы найти способ разместить гексы в одном порядке, но начать все с 0.
Индекс должен быть рассчитан по квадратным позициям [q, r, -q-r], чтобы я мог затем получить доступ к массиву, используя ту же технику.
вот как я сейчас создаю сетку и сохраняю данные:
for (var q = -this.grid_r; q <= this.grid_r; q++) {
var r1 = Math.max(-this.grid_r, -q - this.grid_r);
var r2 = Math.min(this.grid_r, -q + this.grid_r);
for (var r = r1; r <= r2; r++) {
row = r + this.grid_r ;
col = (q+Math.floor(r/2)) + this.grid_r;
if( ! this.hexes[ row ] ){
this.hexes[ row ] = [];
}
n_hex = new Hex( q, r, this.layout );
this.hexes[ row ][ col ] = n_hex;
}
}
Вот как массив выглядит с точки зрения данных.
0 1 2 3 4 5 6
0 0 0 0 0
1 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0
6 0 0 0 0
Я просто хочу избежать использования каких-либо условий в методах рисования или обновления, чтобы проверить, пуст ли столбец или нет.
draw: function( ctx ){
for( var r = 0, r_l = this.hexes.length; r < r_l; r++ ){
for( var c = 0, c_l = this.hexes.length; c < c_l; c++ ){
if( typeof( this.hexes[r][c]) !== "undefined" ){
this.hexes[r][c].draw( ctx );
}
}
}
},