![]() |
[Gelöst] Aussortieren bei TList
Hey DP,
ich baue gerade ein kleines Minigame, bei dem man unter anderem schießen kann (Ja ich weiß, ziemlich kreativ ;) ) und habe für die einzelnen Schüsse eine Liste vom Typ TLIst erstellt, in welche ich Records mit den Daten von meinem Schuss schreibe. Soweit so gut, auslesen und alles funktioniert auch wunderbar, das einzige was einfach nicht funktionieren will ist das aussortieren von Schüssen, die nicht mehr gezeichnet werden müssen. Momentan sieht meine Methode dafür wie folgt aus:
Delphi-Quellcode:
Was meiner Meinung nach funktionieren müsste. Shots ist meine TList, und der Typ PShot ist wie folgt deklariert:
procedure TPlayer.SortShots;
var x: Integer; temp: PShot; begin x := 0; while not x > Shots.Count -1 do begin temp := PShot(Shots.Items[x]); if temp.Timer <= 0 then begin Shots.Remove(temp); dispose(temP); end else inc(x); end; end;
Delphi-Quellcode:
Allerdings bleibt die Länge meiner TList immer gleich hoch, egal ob ich sortieren lasse oder nicht, und darunter leidet die Performance auf Dauer.
type
PShot = ^TShot; TShot = record X, Y: Single; MRot: Single; Timer: Integer; end; Weiß jemand von euch warum das ganze nicht funktioniert? Lg, Edlmann |
AW: Aussortieren bei TList
Mir fällt erst einmal folgendes auf:
Zitat:
Delphi-Quellcode:
heißen.
while not (x > Shots.Count -1) do
[edit] Verständlicher wird es IMHO so:
Delphi-Quellcode:
Wobei ich mich frage, was das mit Sortieren zu tun hat, das ist ja höchstens Aussortieren ;)[/edit]
procedure TPlayer.SortShots;
var x: Integer; temp: PShot; begin for x := Shots.Count -1 downto 0 do begin temp := PShot(Shots.Items[x]); if temp.Timer <= 0 then begin Shots.Remove(temp); dispose(temP); end; end; end; |
AW: Aussortieren bei TList
Mmh...mal wieder an den Tücken des Delphi-Compilers gescheitert ^^
Danke, mit der Klammer funktioniert alles so wie es soll und ich hab immer nur so 25 Schüsse. Ich versteh zwar nicht ganz wie der Compiler dass ohne die Klammer interpretiert (muss ja irgendwie anders sein, ansonsten würds ja funktionieren) aber naja, wieder was gelernt ;) Und ja, Aussortieren wäre passender, aber Sort is kürzer als Sortout :P |
AW: [Gelöst] Aussortieren bei TList
Das ist relativ schnell erklärt. x ist vom Typ integer mit Wert 0, sieht also binär so aus:
Code:
Du fragst aber ohne Klammer auf not x ab (sieht dann so aus):
00000000000000000000000000000000
Delphi-Quellcode:
, was dann
while (not x) > Shots.Count - 1 do
Code:
ergibt. Als Integer ist das -1, das ist niemals größer als Shots.Count - 1 ;)
11111111111111111111111111111111
|
AW: [Gelöst] Aussortieren bei TList
Macht Sinn, danke für die Erklärung ;)
|
AW: [Gelöst] Aussortieren bei TList
Kurz:
Delphi-Quellcode:
invertiert alle Bits von x.
not x
Und ![]()
Delphi-Quellcode:
.
not (x > Shots.Count -1)
=>
Delphi-Quellcode:
.
x <= Shots.Count-1
Dann spart man sich öfters solche Fehler. ;) |
AW: [Gelöst] Aussortieren bei TList
Ich hätte ja
Delphi-Quellcode:
genommen *g*. Oder eher die absteigende For-Schleife wie oben beschrieben.
x < Shots.Count
|
AW: [Gelöst] Aussortieren bei TList
Mmmh...soweit hab ich noch nicht gedacht, hab mir halt gedacht
"ne For-Schleife kannst du ja nicht nehmen, denn wenn du ein Element löscht, rücken die anderen nach" aber wenn mans Rückwärts macht gehts natürlich auch ^^ Da sich das von der Performance her aber nicht viel tut werde ich es so lassen wie ich es jetzt habe ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz