![]() |
Auto hält nicht an roter Ampel
Guten Abend Delphi-Freunde,
ich soll für die Schule eine Ampelschaltung programmieren, nur leider funktioniert eine Sache noch nicht und zwar, wie der Titel schon verrät, hält das Auto (shape Komponente) nicht bei rot.
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin if (auto1.left = 120) and (rot.Visible = true) then begin auto1.left := 160; end else begin auto1.left := (auto1.left +3); if auto1.left = 720 then auto1.left := 0; end; end; das problem ist, das wenn es rot ist hält das shape (auto1) nicht an sonder fährt weiter und dann fährt es nicht bis zum punkt 720 sondern noch viel weiter... habe noch versucht erst abzufragen ob es rot ist und dann ob der wagen bei punkt 140 ist damit er dannach anhält. Ich hoffe ihr könnt mir helfen Mit freundlichen Grüßen snears |
AW: Auto hält nicht an roter Ampel
Versuch mal
Delphi-Quellcode:
if auto1.left >= 720 then
|
AW: Auto hält nicht an roter Ampel
Hallo,
vielleicht solltes du auf <= prüfen. Es kann ja sein, wenn Du die Position immer um 3 erhöhst, den Wert (120) nie genau triffst. Grüße Klaus |
AW: Auto hält nicht an roter Ampel
Also jetzt ist zumindest das Problem weg, dass es bis in die unendlichkeit fährt.
Aber es bleibt nicht stehen sondern fängt nun an von 160 an zu fahren :( auch wenn ich noch eine abfrage dazwischen schiebe funktioniert es nicht :shock::shock: |
AW: Auto hält nicht an roter Ampel
Es könnte auch sein, dass die Bedingung im if einmalig zutrifft aber das Auto dann bewegt wird, sodass der nächste Durchlauf wieder in den else-Zweig geht :stupid:
|
AW: Auto hält nicht an roter Ampel
ah okay ich habe das problem gefunden
Delphi-Quellcode:
einfach nur gucken... aber das fällt schon schwer :-D :lol:if (auto1.left <= 120) and (rot.Visible = true) then begin auto1.left := 120; end else begin auto1.left := (auto1.left +3); if auto1.left >= 720 then auto1.left := 0; end; |
AW: Auto hält nicht an roter Ampel
Da sich dein Auto nicht in Einerschritten bewegt, mußt du also auf Bereiche und keine genauen Werte prüfen, so daß dein Auto dieses auch trifft.
> oder < bringt nicht viel, wenn sich der Bereich mitten im Raum befindet. Tipp: Auf "= true" prüft man nicht.
Delphi-Quellcode:
Und wenn man das Ganze noch etwas umstellt, dann wird der Code kürzer und man spart sich das unnötige Setzen auf 120, wo dasAuto schon dort ist.
if rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then
begin auto1.left := 120; end else begin auto1.left := auto1.left + 3; if auto1.left >= 720 then auto1.left := 0; end;
Delphi-Quellcode:
{ wenn nicht (rot und an Ampel), dann fahren }
if not (rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then ... // bzw. { nur wenn nicht Rot oder vor Ampel oder hinter Ampel, dann fahren } { aka: nur wenn nicht Rot oder nicht an der Ampel, dann fahren } if not rot.Visible or (auto1.left < 120) or (auto1.left >= 120 + 3) then begin { ein Stückchen fahren } auto1.left := auto1.left + 3; { wenn aus dem Bild raus, dann auf Anfang } if auto1.left >= 720 then auto1.left := 0; end; |
AW: Auto hält nicht an roter Ampel
Zitat:
|
AW: Auto hält nicht an roter Ampel
Es kann tatsächlich zu Fehlern führen. Siehe
![]() |
AW: Auto hält nicht an roter Ampel
Zitat:
Caps |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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