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 mr.escape „Du könntest doch die sichtbare liste durchgehen und in ein n-faches array...“
Optionen

Schon mal vielen Dank für die Hilfe euch beiden!

Ich kann zwar noch nicht sicher sagen ob ich mit dem Tipp von mr.escape eine gute Lösung finden werde, das sieht aber schon mal vielversprechend aus.
Ich weiss schon, warum ich die Frage hier und nicht in irgend einem DirectX-Forum gestellt habe... auch wenn es halt ein bisschen dauterte, bis man mich verstand. :)

Jetzt brauch ich erst mal eine Weile, bis ich das durch meine langen und weit verschlungenen Gehirnwindungen durchgelassen habe und sehe, ob was dabei rauskommt. Hab leider in den nächsten Tagen auch nicht besonders viel Zeit.
Also schaut bitte mal wieder vorbei, auch wenn es nur ist, um noch mal meinen Dank zu empfangen ;-)

EDIT: Ich hatte jetzt ein Bisschen Zeit mir das mal genauer anzuschauen.
Das ist einfach genial. Ich kann das zwar nicht direkt so übernehmen, das Grundprinzip werde ich aber beibehalten können.
Heute Abend habe ich mal wieder Zeit zum Coden :)

Gruss yves3



[Diese Nachricht wurde nachträglich bearbeitet.]

bei Antwort benachrichtigen