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:
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;
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.
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;