![]() |
Fehler am Ende einer Prozedur
Liste der Anhänge anzeigen (Anzahl: 1)
In meinem Spiel steuere ich ein Image nach links und rechts. Das mach ich mit Buttons (ist schön einfach) und ner OnKeyDown Prozedur.
Wenn ich jetzt eine Begrenzung festlegen will, damit mein Image nicht zu weit nach links oder rechts bewegt wird krieg ich nen Fehler.
Code:
Wenn ich das jetzt starten will krieg ich diese Meldung:
procedure TForm1.Border(Sender: TObject);
begin if Ship.Left= Ship.Left -150 //maximal 150 Pixel nach links then moveleft.Enabled:= false or if Ship.Left= Ship.Left +150 //maximal 150 Pixel nach rechts then moveright.Enabled:= false end; Zitat:
Wo hab ich den Fehler gemacht??? Thx im Voraus! MfG Florian |
Code:
procedure TForm1.Border(Sender: TObject);
var mittelwert:integer; begin mittelwert:=200; // z.b. if Ship.Left= mittelwert-150 //maximal 150 Pixel nach links then moveleft.Enabled:= false else if Ship.Left= mittelwert+150 //maximal 150 Pixel nach rechts then moveright.Enabled:= false; end; |
Code:
procedure TForm1.move(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key=ord('A') then moveleft.Click else if Key = ord('S') then moveright.Click; end; procedure TForm1.moveleftClick(Sender: TObject); begin if (border('L')) then Ship.Left:= Ship.Left -5; end; procedure TForm1.moverightClick(Sender: TObject); begin if (border('R')) then Ship.Left:= Ship.Left +5; end; function TForm1.Border(LorR:string):boolean; var mittelwert:integer; begin result:=true; mittelwert:=200; // z.b. if Ship.Left= mittelwert-150 then //maximal 150 Pixel nach links begin if LorR='L' then result:=false; end else if Ship.Left= mittelwert+150 then //maximal 150 Pixel nach rechts begin if LorR='R' then result:=false; end; end; end. |
Moin Florian,
Dein Fehler besteht darin, dass Du zu sehr das, was Du Dir im Klartext gedacht hast in Pascal geschrieben hast. "Wenn .... dann oder Wenn... dann" dieses OR in der Mitte ist das Eigentliche Problem. Kurz geschrieben könnte Deine Funktion so aussehen:
Delphi-Quellcode:
(Das sieht jetzt vielleicht etwas verwirrend aus, deshalb eine kurze Erklärung dazu:
MoveLeft.Enabled := Ship.Left = (Ship.Left-150);
MoveRight.Enabled := Ship.Right = (Ship.Right+150); Man kann Boolschen Eigenschaften (hier: Enabled) direkt das Ergebnis eines Vergleiches zuweisen (hier, u.a.: Ship.Left = (Ship.Left-150))) Allerdings würde das dennoch nicht funktionieren, da das Ergebnis immer false wäre (was Dir auch der Compiler als Warning melden würde). Jan's Lösung müsste funktionieren. |
Der Code ist nicht mehr aktuell. Dank Jan´s und Daniel_B´s Hilfe funktioniert es jetzt endlich. Noch mal vielen Dank!
:dancer: :dancer2: :bouncing4: :bounce1: :bounce2: :hello: :hello: :mrgreen: :spin: :chat: MfG Florian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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