Hallo,
ich habe in meinem Projekt ein Performance Problem.
Ich habe eine grosse Liste von Grafik-Objekten, die auf ein Graphics eines Panels gezeichnet werden. Jetzt möchte ich für ein Objekt, das unter der Maus liegt, einen Tooltip anzeigen. Dafür laufe ich bei jeder Mausbewegung durch diese Liste und prüfe mit einem Hit-Test ob das Objekt zu meiner Mausposition passt. Das ist für ein paar Objekte ok, aber wenn man mehr als 5000 Objekte hat ist das schon nicht mehr so schön.
Hier meine Frage: Wie könnte man dieses Problem lösen? Gäbe es eine Möglichkeit, die Liste zu sortieren (nach x, y und z-Order)? Und wie findet man dann das Objekt?
MFG
Hallo,
Die Moeglichkeiten sind vielfaeltig. DU kannst z.b. alle Objekte in einen Quadtree einsortieren, und nur die Objekte in den Knoten des Mauszeigers abfragen.
Gruss
purestrain
Suche mal im Forum nach dem Stichwort "Quadtree". Ich glaube sogar dass jemand bereits eine fertige Implementierung gepostet hat.
Du kannst auch einfach eine Struktur bauen die ein Gitter darstellt.
In jeder Zelle speicherst du dann deine Objekte entsprechend ihrer Position, wenn
du nun einen HitTest machen willst, dann durchläufst du einfach nur alle Zeilen und Spalten die der aktuellen Mausposition am nächsten kommen und prüfst dann die interne List auf Objekte die mit der Maus kollidieren.
Das sollte etwas schneller sein.
s. dazu auch:
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.