AGB  ·  Datenschutz  ·  Impressum  







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

abs funktioniert nicht

Offene Frage von "hansdieter11"
Ein Thema von hansdieter11 · begonnen am 10. Jan 2010 · letzter Beitrag vom 10. Jan 2010
Antwort Antwort
Seite 2 von 4     12 34      
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:06
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.
  Mit Zitat antworten Zitat
hansdieter11

Registriert seit: 26. Feb 2009
41 Beiträge
 
#12

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:07
Das ist klar.
Aber wie löse ich das bzw. wo mache ich die ABS-Abfrage rein, sodass alles geht ?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:10
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.
  Mit Zitat antworten Zitat
hansdieter11

Registriert seit: 26. Feb 2009
41 Beiträge
 
#14

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:23
Delphi-Quellcode:
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 'r' kann nach Durchlauf undefiniert sein

[Warnung] Unit1.pas(153): FOR-Schleifenvariable 'i' kann nach Durchlauf undefiniert sein

Funktioniert leider nicht.
Oder was ist mein Fehler ?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:27
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:31
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
Klaus
  Mit Zitat antworten Zitat
hansdieter11

Registriert seit: 26. Feb 2009
41 Beiträge
 
#17

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:43
Es wird nie mehr was glaube ich

Delphi-Quellcode:
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);
Stürzt wieder sofort ab. Habe jetzt alles so geändert, wie vorgeschlagen.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:45
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:47
Delphi-Quellcode:
 
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 wird freigegeben und beim nächsten Durchlauf i+1 kracht es
                Raumschiff[r] := nil;
                Abgeschossen := Abgeschossen+1;
              end;
          end;
    end;
[edit] das ist natürlich Mumpitz, denn Du prüfst ja auf <> nil im Schleifenbegin


Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: abs funktioniert nicht

  Alt 10. Jan 2010, 21:53
Zitat von Klaus01:
[edit] das ist natürlich Mumpitz, denn Du prüfst ja auf <> nil im Schleifenbegin
Was soll das jetzt. Hat er denn immer soviele Raumschiffe wie Kugeln?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 10:37 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