Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi abs funktioniert nicht (https://www.delphipraxis.net/145915-abs-funktioniert-nicht.html)

hansdieter11 10. Jan 2010 20:40


abs funktioniert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

habe ein Programm geschrieben, in dem Kugeln Raumschiffe treffen sollen.

Das habe ich dann mit abs(... - ... < 1) gelöst, doch das Programm stürzt sofort ab.

Danke schonmal für die Mithilfe. :)

Grüße
Timo ;)

Delphi-Quellcode:
procedure TForm1.TiRaumschiffTimer(Sender: TObject);
begin
  FOR r:=1 TO number DO
    begin
     IF Raumschiff[r] <> nil
     THEN
      begin
        Raumschiff[r].GoRight;
        ShRaumschiff[r].Left := Raumschiff[r].xCoord;


        IF Raumschiff[r].xCoord > 700
        THEN
         begin
           Raumschiff[r].xCoord := -50;
           ShRaumschiff[r].Left := Raumschiff[r].xCoord;
         end;

        If (abs(Raumschiff[r].xCoord-Kugel[i].xCoord)<1) and
            (abs(Raumschiff[r].yCoord-Kugel[i].yCoord)<1) then
        begin
          Raumschiff[r].Destroy;
          Abgeschossen := Abgeschossen+1;
        end;

      end;
     end;

  LaRaumschiffe.caption := inttostr(Abgeschossen);
end;

omata 10. Jan 2010 20:45

Re: abs funktioniert nicht
 
- Debuggen? -> Welche Zeile?
- Mit Destroy gibt man keine Objekte frei.

himitsu 10. Jan 2010 20:45

Re: abs funktioniert nicht
 
Wie in der OH steht, ruft man Destroy nicht direkt auf, :warn:
sondern nutzt Free.

Wobei, da du auf NIL prüfst, solltest du Delphi-Referenz durchsuchenFreeAndNil verwenden

hansdieter11 10. Jan 2010 20:47

Re: abs funktioniert nicht
 
Ich verstehe leider kein Wort :(
Was muss ich jetzt machen, damit es funktioniert ? :)
Grüße
Timo

omata 10. Jan 2010 20:48

Re: abs funktioniert nicht
 
Delphi-Quellcode:
:
  If (abs(Raumschiff[r].xCoord-Kugel[i].xCoord)<1) and
      (abs(Raumschiff[r].yCoord-Kugel[i].yCoord)<1) then
  begin
    Raumschiff[r].Free;
    Raumschiff[r]:=nil;
    Abgeschossen := Abgeschossen+1;
  end;
:

hansdieter11 10. Jan 2010 20:50

Re: abs funktioniert nicht
 
Verstehe deinen Ansatz, aber es geht immer noch nicht.

Habe mein Programm auch online gestellt, falls du es dir im Ganzen angucken möchtest.

Grüße

omata 10. Jan 2010 20:54

Re: abs funktioniert nicht
 
Schau dir einfach mal die Warnungen an, die dein Compiler dir ausspuckt und beheben diese. Dann läuft dein Programm einwandfrei.

Edit: Globale Variablen sind böse und so wenig wie nötig zu verwenden!

hansdieter11 10. Jan 2010 20:58

Re: abs funktioniert nicht
 
Aber wenn ich i global mache, so wird sie bei abs(....[i]) wohl nicht erkannt, oder ?
Grüße :)

omata 10. Jan 2010 21:03

Re: abs funktioniert nicht
 
Ich verstehe deine Probleme nicht.

Der Compiler sagt, dass die Laufvariable einer FOR-Schleife immer lokal deklariert sein muss.

Also deklariere dein i und r lokal, dort wo deine Schleifen sind und fertig.

Mach es doch nicht kompilzierter als es ist.

hansdieter11 10. Jan 2010 21:05

Re: abs funktioniert nicht
 
Ja, das habe ich doch gemacht, aber nun verschwinden die Raumschiffe
bei Berührung mit der Kugel nicht und 'Abgeschossen' geht auch nicht hoch. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.
Seite 1 von 4  1 23     Letzte »    

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