Bei Windows kann man die Elemente eines Fensters nach verschiedenen Aspekten sortieren lassen: Z.B. nach Dateigröße, Name oder Änderungsdatum.
Diese Funktion ist sehr nützlich für z.B. Strategiespiele, mag aber den GML-Anfänger etwas überfordern. Es ist aber ganz einfach, und schnell erklärt.
Ich habe lange Zeit keine Verwendung für ds_priority gehabt - bis ich an die Grenzen von instance_nearest kam und das hier fand. Seitdem benutze ich diese Methode regelmäßig für verschiedene Sortierungen.
Der wesentlich Teil ist hier der untere:
Nach diesem Prinzip kann man also jede Liste (hier die Instanzen von "object") nach einem bestimmen Parameter (hier "distance_to_point") sortieren.
Für den oben genannten Zweck sollte man die ganze (sortierte) Liste nochmal speichern, bzw. jedem Element seinen Platz in der Sortierung zuweisen. Ich zeig Euch mal was ich meine:
Alles anzeigen
Wenn ich jetzt die Tabelle zeichnen will, sieht das dann nicht mehr so aus:
sondern so:
Diese Funktion ist sehr nützlich für z.B. Strategiespiele, mag aber den GML-Anfänger etwas überfordern. Es ist aber ganz einfach, und schnell erklärt.
Ich habe lange Zeit keine Verwendung für ds_priority gehabt - bis ich an die Grenzen von instance_nearest kam und das hier fand. Seitdem benutze ich diese Methode regelmäßig für verschiedene Sortierungen.
Der wesentlich Teil ist hier der untere:
Nach diesem Prinzip kann man also jede Liste (hier die Instanzen von "object") nach einem bestimmen Parameter (hier "distance_to_point") sortieren.
Für den oben genannten Zweck sollte man die ganze (sortierte) Liste nochmal speichern, bzw. jedem Element seinen Platz in der Sortierung zuweisen. Ich zeig Euch mal was ich meine:
GML-Quellcode
- // sortiert Kolonien nach Name, Population, etc. (argument0)
- var pr,i,a;
- pr=ds_priority_create();
- for (i=0;i<colonies;i+=1)
- {
- switch argument0
- {
- case 0: a=Cname[i]; break;// sort by name
- case 1: a=Cpopu[i]; break;// sort by population
- case 2: a=Cindu[i]; break;// sort by industry
- }
- ds_priority_add(pr,i,a);
- }
- while i>0 // "i" hat noch den richtigen Wert, also brauchen wir nur runterzählen
- {
- i-=1;
- s=ds_priority_find_min(pr);
- Csort[i]=ds_priority_delete_min(pr); // und die Reihenfolge in einem Array speichern
- }
- ds_priority_destroy(pr);
Wenn ich jetzt die Tabelle zeichnen will, sieht das dann nicht mehr so aus:
sondern so: