Шестиугольные плитки не выстраиваются должным образом, между ними есть промежутки.

Я пытаюсь нарисовать карту с шестиугольными плитками. Однако мне не удается правильно выстроить плитки, поэтому между ними нет места. Вот изображение моей проблемы.Один с плитками, которые я обычно использую, а другой с увеличенным масштабом и другой плиткой, чтобы убедиться Дело не только в том, что со мной шутят сглаживание.

Это код, который отвечает за получение пиксельных координат для каждой плитки. По-видимому, есть какой-то просчет со смещением каждой нечетной строки, но простое добавление или вычитание пикселя только увеличивает промежутки.

private static final float HEX_WIDTH = 97; // 139 for colored tiles
private static final float HEX_HEIGHT = (float) (Math.sqrt(3)/2 * HEX_WIDTH);

public Vector2 getHexCoordinates(Hexagon hex) {
    float x = (float) HEX_WIDTH * hex.getGridX() * 3 / 4;
    float y = (float) HEX_HEIGHT * (hex.getGridX() / 2 + hex.getGridY());
    y = (hex.getGridX() % 2 == 0) ? y : y + HEX_HEIGHT / 2;
    return new Vector2(x, y);
}

Кроме того, вот плитки, которые я использую, если кому-то интересно.


person Askr    schedule 19.01.2016    source источник
comment
Я заметил, что y не увеличивается постоянно (по мере увеличения gridx / y). Это очень маленькое отклонение, но в зависимости от того, как вы делаете пол / закругление, оно может создавать зазоры.   -  person Terje    schedule 19.01.2016
comment
Нет настила / закругления. Шестнадцатеричные спрайты получают координаты без каких-либо дополнительных математических операций, а функция рисования также использует числа с плавающей запятой. При этом ширина зазоров не увеличивается, что заметно. Судя по тому, что я вижу, проверяя координаты, они также появляются повторяющимися.   -  person Askr    schedule 19.01.2016
comment
Вы пытались округлить до 1 или 2 знаков после запятой? Это должно дать вам хотя бы постоянный интервал.   -  person Terje    schedule 19.01.2016
comment
Фактически, округление дает несогласованный интервал, так как при достижении порогового значения к смещению добавляются / вычитаются дополнительные пиксели.   -  person Askr    schedule 19.01.2016


Ответы (2)


Вы пробовали просто уменьшить HEX_WIDTH на 1?

private static final float HEX_WIDTH = 96;

Ваш рост, по-видимому, в порядке, потому что у вас нет горизонтальных промежутков.

person alamar    schedule 19.01.2016
comment
Это приводит только к уменьшению размеров отдельных шестигранных плиток, все еще остаются зазоры. - person Askr; 19.01.2016

Масштабирование отдельных спрайтов на 1.01f уменьшило размер промежутков в достаточной степени, чтобы можно было считать эту проблему решенной.

person Askr    schedule 22.01.2016