Ich rendere ein Raster aus flachen Hexfeldern auf ein HTML5-Zeichenfeld. Platzierung und Kommissionierung funktionieren einwandfrei. Zu jeder Zeit sollte das gesamte Gitter sichtbar sein.Berechne das Seitenverhältnis eines hexagonalen Spielfelds
Dazu berechne ich das Minimum Rechteck, das alle Sechsecke vollständig enthält, und verwende seine Höhe und Breite, um die Leinwandgröße (Letterboxed) zu berechnen. Zur Berechnung der Größe verwende ich die gleichen Koordinaten verwende ich holen und die Fliesen Layout und berechnen:
tile_width = 2 // 2 * distance center-corner
tile_height = 1.7320508075688772 // sqrt(3) * distance center-corner
horiz_dist = 1.5 // 3/4 * tile_width
width = 1/4 * tile_width + number_x_tiles * horiz_dist
height = 1/2 * tile_height + number_y_tiles * tile_h
aspect = width/height
werden jedoch die angezeigten Fliesen verzerrt, werden sie gestreckt in x-Richtung. Ist mit meiner Formel etwas nicht in Ordnung? Die Messungen wurden abgeleitet als the fantastic redblob games resource beschreibt es.
Ich bin mir ziemlich sicher, dass die Funktion, die x- und y-Skalierung abhängig vom Seitenverhältnis anwendet, gut funktioniert, da orthogonale Karten genau so aussehen, wie sie sollten.
Was ist die Formel für tile_h? Ich denke, das Problem ist, dass Sie mit ungeraden und geraden Zahlen von Kacheln anders umgehen müssen. horiz_dist wird nur 1,5 gemittelt über 2 Kacheln sein, es sei denn, ich missverstehe es. Bitte erklären Sie auch, warum Sie Breite um 1/4, aber Höhe um 1/2 multiplizieren – samgak
Hallo samgak. tile_h wurde von tile_height abgeschnitten, sorry, habe das nicht bemerkt. Ich füge 1/4 Breite hinzu, weil die erste Spalte genau eine Kachel breit ist, jede nachfolgende Spalte fügt 3/4 Breite hinzu. Für die Höhe fügt jede gerade Zeile eine Breite hinzu, und wenn (und nur wenn, siehe aichaos Antwort) meine ungeraden Spalten die gleiche Höhe wie die geraden Spalten haben, fügen die ungeraden Zeilen eine weitere halbe Höhe zur Summe hinzu. Sie können das auf den Bildern in dem Link, den ich zur Verfügung gestellt habe. – user3410194