Hexagon auswählen/ermitteln



  • Hi,

    ich programmiere gerade ein TBS (rundenbasiertes Stragegiespiel) in C++ mit der SDL. Die Spielfläche besteht aus Sechsecken, die sich an ihren Kanten berühren. Jetzt möchte ich eine Spielfigur, die sich auf einem Hexagon befindet, auswählen, weiß allerdings nicht, wie ich das realisieren soll. Vorgestellt hatte ich mir das so:

    maus.x|ypos / hexagon.weite|höhe => i.te Spalte|Reihe (abgerundet)

    Das funktioniert ja auch für Rechtecke, jedoch gibt es bei Sechsecken Bereiche, bei denen bei dieser Rechnung ein falscher Wert ermittelt wird (weil jede 2. Spalte wg. der Sechseck-Form versetzt sein muss - hoch, tief, hoch..).

    Hat jemand eine Idee, wie ich das realisieren kann?

    mfg

    Boreas



  • also vll wäre für besonders schnelle algorithmen die verwendung eines kreises zu empfehlen...
    ansonsten: such mal nach punkt-in-dreieck algorithmen, hier im forum gabs sowas grade.

    dann kombinieren mit punkt-in-rechteck (lässt sich durhc maximal 4 if-abfragen festellen)



  • Mach die Abfrage genau wie bei einem Tilesystem. Nur sind hier die Rechtecke die Bounding Boxen der Sechsecke. Manchmal findest du 2, dann gilt das Nähere (logisch!).

    Bye, TGGC (Das Eine, welches ist.)



  • hab das mal programmiert vor ca 2-3 Jahren.

    normallerweise, wenn man Reihen in hex geometrien definiert, dann liegen die einzelnen hexses (was fuer ein schoener plural 😉 ) nicht auf einer Hoehe wie rechecke sonder variieren:

    man kann das einfach loesen, mit der maus postion kann man theoretische Index fuer x/y der hexses errechen und ueberpruefen (da man ja je nach gerade oder ungeradzahlige index weis welchen offset das hex feld in y hat, ob nun die maus wirklich drin ist oder nicht.)
    Damit reduziert sich die genaue innerhalb-von-hex-feld - koordinaten berechnung auf max 4 felder, von denen auch wiederrum nur die seiten dreicke interessant sind, da nur diese von verschiedenen Felder fuer einen x wert ueberlappen in y richtung. Das center rechteck der tapeze is ja eindeutig.


Anmelden zum Antworten