Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Performant sortieren

Yves3 / 8 Antworten / Flachansicht Nickles

Hallo

Ich habe ein eindimmensionales WORD-Array.
Immer 6 Werte in diesem Array gehören zusammen und ihnen ist ein Wert aus einem zweidimmensionalen Int-Array zugeordnet.

Dabei geht es um eine TileEngine.. Den 6 Word-Indices ist je eine Textur zugeordnet.

Ich muss jetzt die Indices nach den Texturen sortieren, denen sie zugeordnet sind und je in einem separaten Array der Reihe nach festhalten, (1) um welche Textur es sich handelt und (2) wie viele Indices zu dieser Textur passen.

Am Schluss würde ich dann also 3 Arrays verwenden:
1. Array mit allen Indices sortiert nach dazugehörigen Texturen
2. Array, in dem gespeichert ist, welche Textur jeweils zu den Indices gehört
3. Array das angibt, wieviele Indices jeweils zur gleichen Textur gehören

Ich rufe dann die Zeichenfunktion für jede Textur einmal auf, so nach dem Stil:

int StartIndex=0;
for(int i=0; i {
SetTexture(Textur[Array2[i]])
Draw(Array1, StartIndex, StartIndex+Array3[i]);
StartIndex += Array3[i];
}

Der Witz an dem ganzen ist, dass das Sortieren und das Erstellen der 3 Arrays in jedem Frame gemacht werden musss und es daher schon verdammt schnell sein müsste.
Meine bisherigen Lösungsideen scheinen mir alle ein bisschen umständlich.

Ich hoffe ihr hab verstanden, wie ich das meine und könnt mir eventuel l helfen :)

Danke!





[Diese Nachricht wurde nachträglich bearbeitet.]

bei Antwort benachrichtigen
Yves3 Andreas42 „Hi! Jetzt verstehe ich denke ich zumindest - was du vorhast bzw. benötigst. An...“
Optionen

Bisher hatte ich ja auch vor, nur den sichtbaren Teil zu sortieren.
Das ist aber immer noch ne ganze Menge und ich habe dafür noch keinen wirklich guten Algorithmus.
Das Struktogramm in dem Beitrag weiter oben ist eine Lösung dafür, eben leider eine ziemlich lahme.

Den zweiten Punkt von dir hab ich mir auch schon durch den Kopf gehen lassen, da müssen aber ziemlich viele Eventuealitäten beachtet werden... man kann in alle Richtungen scrollen und auch zoomen.
Ich hab schon vor einiger Zeit mal versucht, ein Bild so ähnlich zu scrollen.
Also einfach ein gigantisches Bitmap und dann beim Scrollen streifenweise neue Teile laden.
Das ist verdammt komplex und jetzt in meinem Beispiel eher noch eine Stufe komlexer.
Beim Scrollen entsehen ja sozusagen Lücken im bisher durchgehend gefüllten WORD-ARRAY.
Diese Lücken müssen dann irgendwie wieder gestopft werden und gleichzeitig müssen neue Daten dazwischengequetsche werden. Ich denke das wird am Schluss langsamer als wenn ich alles neu mache.

bei Antwort benachrichtigen