Я работаю над игрой, в которой будут задыхаться шестиугольники.
В настоящее время у меня есть изображение шестиугольника, которое я использую (все стороны имеют одинаковую длину ... оно вписывается в изображение размером 50 на 50 пикселей).
Я немного новичок в C # и действительно новичок в XNA, но есть ли какой-то простой метод, который я могу вызвать, вместо того, чтобы делать сложный оператор if, основанный на точках и углах?
c#
xna
hexagonal-grid
the_e
источник
источник
Ответы:
Шестиугольник - это прямоугольник с обрезанными углами. То, как я это сделал, и я слышал, что серия Civilization делает это с помощью ортогональных карт, - это создание растрового изображения с пробелом (ортогональным или шестиугольным) и красным, зеленым, синим и желтым угол. (Или любые цвета, которые вам нравятся.)
Шестиугольный: или
Ортогональные:
Затем просто определите, на каком прямоугольнике находится курсор, и проверьте цвет пикселя в этом месте. Если он белый, они парят над этим пространством. Каждый другой цвет сопоставляется со смещением, и вместо этого они парят над этим шестиугольником. Этот способ эффективен, требует мало геометрии и может использоваться для любого произвольного тесселяционного пространства.
источник
Там нет метода XNA, который делает проверку удара шестиугольника.
Эта статья объясняет, как написать функцию, которая выполняет тест, и дает вам функцию:
Как проверить, находится ли точка внутри шестиугольника
Вот краткое изложение этой статьи:
И функция, выполняющая тест, выглядит так:
isInside
тест для локального квадранта.Смотрите статью для более подробной информации.
Вот некоторые другие полезные связанные источники:
Координаты в шестиугольниках
Точка внутри правильного шестиугольника?
источник
Здесь я получил метод, который можно использовать для обнаружения кликов внутри любого многоугольника:
Вам нужно дать углы вашего шестиугольника в массиве vector2 (poly) и нажатую позицию (p) для метода.
источник