Aus absichtlichen Gründen haben bestimmte Einheiten in dem Spiel, das ich gerade programmiere, keine Kollisionserkennung und -reaktion untereinander.
Dies ermöglicht es ihnen, direkt übereinander zu liegen. Dies ist ein gewünschtes Verhalten, da es Situationen im Spiel geben wird, in denen der Spieler möchte, dass sie sich so stapeln.
Ich möchte dem Spieler jedoch das Aufräumen erleichtern, sodass er nur einen Hotkey drücken oder auf eine Schaltfläche auf dem Bildschirm klicken muss und die Einheiten gerade so weit verteilt sind, dass es einfach ist, eine Gruppe von ihnen mit dem auszuwählen Maus (wenn sie übereinander stehen, wählt ein Mausklick alle Einheiten aus).
Wie könnte ich dies tun, ohne eine Brute Force N ^ 2-Suche nach dem nächsten Nachbarn für alle Einheiten durchzuführen?
Antworten:
Erstellen Sie ein Raster mit genügend Platz für alle Einheiten, die Sie "übersichtlich" machen möchten. Lassen Sie sie jeweils den nächsten nicht beanspruchten Rasterplatz auswählen . Lassen Sie sie dann in Richtung ihres jeweiligen Rasterraums bewegen.
Dadurch werden sie in eine Art Formation versetzt, in der der Spieler leicht eine einzelne Einheit auswählen kann.
Das ist eine O (N) -Operation mit ziemlich guten Ergebnissen.
quelle