AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Gelöst] Aussortieren bei TList

Ein Thema von Edlmann · begonnen am 17. Mär 2011 · letzter Beitrag vom 17. Mär 2011
Antwort Antwort
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#1

[Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 12:36
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:
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;
Was meiner Meinung nach funktionieren müsste. Shots ist meine TList, und der Typ PShot ist wie folgt deklariert:

Delphi-Quellcode:
type
  PShot = ^TShot;
  TShot = record
  X, Y: Single;
  MRot: Single;
  Timer: Integer;
end;
Allerdings bleibt die Länge meiner TList immer gleich hoch, egal ob ich sortieren lasse oder nicht, und darunter leidet die Performance auf Dauer.
Weiß jemand von euch warum das ganze nicht funktioniert?

Lg, Edlmann

Geändert von Edlmann (17. Mär 2011 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Aussortieren bei TList

  Alt 17. Mär 2011, 13:04
Mir fällt erst einmal folgendes auf:
Zitat:
while not x > Shots.Count -1 do
Das sollte wohl
while not (x > Shots.Count -1) do heißen.

[edit] Verständlicher wird es IMHO so:
Delphi-Quellcode:
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;
Wobei ich mich frage, was das mit Sortieren zu tun hat, das ist ja höchstens Aussortieren [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (17. Mär 2011 um 13:15 Uhr)
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#3

AW: Aussortieren bei TList

  Alt 17. Mär 2011, 13:21
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: [Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 13:27
Das ist relativ schnell erklärt. x ist vom Typ integer mit Wert 0, sieht also binär so aus:
Code:
00000000000000000000000000000000
Du fragst aber ohne Klammer auf not x ab (sieht dann so aus):
while (not x) > Shots.Count - 1 do , was dann
Code:
11111111111111111111111111111111
ergibt. Als Integer ist das -1, das ist niemals größer als Shots.Count - 1
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#5

AW: [Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 13:30
Macht Sinn, danke für die Erklärung
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#6

AW: [Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 13:33
Kurz: not x invertiert alle Bits von x.

Und KISS wo es nur geht.
not (x > Shots.Count -1) .
=> x <= Shots.Count-1 .
Dann spart man sich öfters solche Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 13:41
Ich hätte ja
x < Shots.Count genommen *g*. Oder eher die absteigende For-Schleife wie oben beschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#8

AW: [Gelöst] Aussortieren bei TList

  Alt 17. Mär 2011, 14:45
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz