![]() |
Re: abs funktioniert nicht
Ok, jetzt sehe ich was du meinst.
So geht das aber nicht! Dann musst du dein Konzept umstellen. Du kannst nicht in einer Routine eine Schleife haben und in einer anderen auf deren Zählwert zugreifen. So kann man nicht programmieren. |
Re: abs funktioniert nicht
Das ist klar.
Aber wie löse ich das bzw. wo mache ich die ABS-Abfrage rein, sodass alles geht ? :) |
Re: abs funktioniert nicht
Dafür muss man erstmal verstehen, was du überhaupt machen willst und das muss ganz anders aufgebaut werden.
Der erste Ansatz wäre erstmal nur einen einzigen Timer für alles zubenutzen. Dann musst du eben jeweils für jedes Objekt nachschauen, ob es mit einem anderen kollidiert. |
Re: abs funktioniert nicht
Delphi-Quellcode:
[Warnung] Unit1.pas(153): FOR-Schleifenvariable 'r' kann nach Durchlauf undefiniert sein
procedure TForm1.TiRaumschiffTimer(Sender: TObject);
var r,i: integer; 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; end; end; FOR i:=1 TO nummer DO begin IF Kugel[i] <> nil THEN begin Kugel[i].GoUp; ShKugel[i].Top := Kugel[i].yCoord; end; 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; LaRaumschiffe.caption := inttostr(Abgeschossen); end; [Warnung] Unit1.pas(153): FOR-Schleifenvariable 'i' kann nach Durchlauf undefiniert sein Funktioniert leider nicht. :( Oder was ist mein Fehler ? |
Re: abs funktioniert nicht
Die Meldung ist doch eindeutig. Du kannst nicht auf eine Laufvariable einer FOR-Schleife außerhalb der Schleife zugreifen.
Also entweder den Wert in einer anderen Variablen abspeichern oder die zweite Schleife innerhalb der ersten notieren? Das kommt darauf an, was man machen will. |
Re: abs funktioniert nicht
Guten Abend,
du nutzt die Schleifenvariablen r und i nach der Schleife. Da können sie einen undefinierten Wert haben. In Deinem Fall hat r den Wert number und i den Wert nummer. Wenn in der Schleife ein Überprüfungskriterium zutrifft solltest Du den Wert von r bzw. i in einer separaten Variable speichern. Grüße Klaus |
Re: abs funktioniert nicht
Es wird nie mehr was glaube ich :D
Delphi-Quellcode:
Stürzt wieder sofort ab. Habe jetzt alles so geändert, wie vorgeschlagen.
procedure TForm1.TiRaumschiffTimer(Sender: TObject);
var r,i: integer; begin FOR i:=1 TO nummer DO 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].yCoord-Kugel[i].yCoord)<1) and (abs(Raumschiff[r].xCoord-Kugel[i].xCoord)<1) then begin Raumschiff[r].Free; Raumschiff[r] := nil; Abgeschossen := Abgeschossen+1; end; end; end; IF Kugel[i] <> nil THEN begin Kugel[i].GoUp; ShKugel[i].Top := Kugel[i].yCoord; end; end; LaRaumschiffe.caption := inttostr(Abgeschossen); |
Re: abs funktioniert nicht
Du prüfst ja auch nicht (überall) ob du überhaupt auf die Kugel zugreifen darfst.
Setzt einen Breakpoint, schau dir an, wo das was du dir überlegt hast nicht mehr mit dem übereinstimmt, was passiert und ändere das, was falsch läuft ab. So programmiert man. |
Re: abs funktioniert nicht
Delphi-Quellcode:
[edit] das ist natürlich Mumpitz, denn Du prüfst ja auf <> nil im SchleifenbeginFOR i:=1 TO nummer DO 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].yCoord-Kugel[i].yCoord)<1) and (abs(Raumschiff[r].xCoord-Kugel[i].xCoord)<1) then begin Raumschiff[r].Free; // Raumschiff r wird freigegeben und beim nächsten Durchlauf i+1 kracht es Raumschiff[r] := nil; Abgeschossen := Abgeschossen+1; end; end; end; Grüße Klaus |
Re: abs funktioniert nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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-2025 by Thomas Breitkreuz