Pracuję nad grą, która ma zamiar zaangażować gasp sześciokątów.
Obecnie mam obraz sześciokątny, którego używam (wszystkie boki mają tę samą długość ... pasuje do obrazu 50 na 50 pikseli).
Jestem trochę nowy w C # i naprawdę nowy w XNA, ale czy jest jakaś prosta metoda, którą mogę wywołać, zamiast wykonywać zawiłe, jeśli zdanie oparte na punktach i kątach?
c#
xna
hexagonal-grid
ciebie
źródło
źródło
Odpowiedzi:
Sześciokąt to prostokąt z obciętymi narożnikami. Sposób, w jaki to widziałem i słyszałem, że seria Civilization robi to w ten sposób z mapami ortogonalnymi, polega na utworzeniu mapy bitowej z białą przestrzenią (ortogonalną lub heksagonalną) oraz czerwoną, zieloną, niebieską i żółtą kąt. (Lub jakikolwiek inny kolor).
Sześciokątny: lub
Prostokątny:
Następnie po prostu określ, na którym prostokącie znajduje się kursor, i przetestuj kolor piksela w tym miejscu. Jeśli jest biały, unoszą się nad tą przestrzenią. Każdy inny kolor jest odwzorowany na przesunięcie i zamiast tego najeżdżają na ten sześciokąt. Ten sposób jest wydajny, wymaga niewielkiej geometrii i może być wykorzystywany do dowolnej przestrzeni mozaikowej.
źródło
Nie ma metody XNA, która wykonuje test trafienia w sześciokąt.
W tym artykule wyjaśniono, jak napisać funkcję wykonującą test, i podano jej funkcję:
Jak sprawdzić, czy punkt znajduje się w sześciokącie
Oto streszczenie tego artykułu:
Funkcja, która wykonuje test, wygląda następująco:
isInside
test dla lokalnej ćwiartki.Zobacz artykuł, aby uzyskać szczegółowe informacje.
Oto kilka innych przydatnych powiązanych źródeł:
Współrzędne w mapach kafelkowych opartych na sześciokącie
Czy punkt znajduje się w regularnym sześciokącie?
źródło
Oto metoda, której można użyć do wykrywania kliknięć wewnątrz dowolnego wielokąta:
Musisz podać rogi sześciokąta w tablicy vector2 (poli) i pozycję kliknięcia (p) metodzie.
źródło