Ich arbeite an einem Spiel , das verwickeln wird Keuchen Hexagone.
Gegenwärtig verwende ich ein Sechseckbild (alle Seiten sind gleich lang ... es passt in ein 50 x 50 Pixel großes Bild).
Ich bin etwas neu in C # und wirklich neu in XNA, aber gibt es eine einfache Methode, die ich aufrufen kann, anstatt eine gewundene if-Anweisung basierend auf Punkten und Winkeln auszuführen?
c#
xna
hexagonal-grid
dich
quelle
quelle
Antworten:
Ein Sechseck ist ein Rechteck mit abgeschnittenen Ecken. Ich habe dies so gesehen und gehört, dass die Civilization-Serie dies mit orthogonalen Karten tut, indem sie eine Bitmap mit einem weißen Raum (orthogonal oder hexagonal) und einem roten, grünen, blauen und gelben erzeugt Ecke. (Oder welche Farben du magst.)
Sechseckig: oder
Senkrecht:
Bestimmen Sie dann einfach, über welchem Rechteck sich der Cursor befindet, und testen Sie die Farbe des Pixels an dieser Stelle. Wenn es weiß ist, schweben sie über diesem Raum. Jede andere Farbe wird einem Versatz zugeordnet und sie schweben stattdessen über diesem Sechseck. Dieser Weg ist effizient, benötigt wenig Geometrie und kann für jeden beliebigen Mosaikraum verwendet werden.
quelle
Es gibt keine XNA-Methode, die einen Hexagon-Treffer-Test durchführt.
Dieser Artikel beschreibt, wie Sie eine Funktion schreiben, die den Test durchführt, und gibt Ihnen die Funktion:
So prüfen Sie, ob sich ein Punkt innerhalb eines Sechsecks befindet
Hier ist eine Zusammenfassung aus diesem Artikel:
Und die Funktion, die den Test durchführt, sieht folgendermaßen aus:
isInside
Test für den lokalen Quadranten durch.Ausführliche Informationen finden Sie im Artikel.
Hier sind einige andere nützliche Quellen:
Koordinaten in hexagonalen Kacheln
Befindet sich ein Punkt in einem regulären Sechseck?
quelle
Hier habe ich eine Methode, die verwendet werden kann, um Klicks innerhalb eines Polygons zu erkennen:
Sie müssen der Methode die Ecken Ihres Sechsecks in einem Vektor2-Array (poly) und die angeklickte Position (p) geben.
quelle