Измените SpawnHexGrid () на:
void SpawnHexGrid(int Width, int Height)
{
int xStart = -Width / 2;
int yStart = -Height / 2;
int yEnd = yStart + Height;
for (int y = yStart; y < yEnd; y++)
{
int xEnd = xStart + Width + (y%2==0 ? 0 : -1);
for (int x = xStart; x < xEnd; x++)
{
SetHexagon(new Cube(x, y));
}
}
}
Моя тестовая установка:
---------- РЕДАКТИРОВАТЬ ----------
Я не понимаю, почему вы используете значение y в качестве части вычисления x.Сделайте константу x для всего столбца, как вы ожидаете для обычной сетки.В моем коде более короткие строки все еще начинаются с координат SAME x как более длинные;их длина меняется.Затем, , когда вы рисуете , я просто вычисляю положение для нормальной сетки, но добавляю половину ширины шестиугольника для всех нечетных y-позиций, что приводит к смещению, необходимому для шестиугольников.
Например, здесь сетка 5x5 нарисована "нормально" без смещения нечетных Y строк.Ясно, что начальная координата X для всех строк одинакова:
Таким образом, сохраненные координаты x, y основаны на нормальной сетке, но код чертежа смещаетнечетные у строк.Вот где я изменяю координату X, только для рисования , нечетных строк y:
if (pt.Y % 2 != 0)
{
center.Offset(Width / 2, 0);
}
Итак, после добавления смещения (опять же, только во время рисования) для нечетного Yстроки теперь выглядят так:
А вот сетка, показывающая внутренние координаты каждого отображаемого шестиугольника:
Надеюсь, это прояснит, как я подошел к нему.