Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler am Ende einer Prozedur (https://www.delphipraxis.net/3350-fehler-am-ende-einer-prozedur.html)

flomei 7. Mär 2003 22:56


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:
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;
Wenn ich das jetzt starten will krieg ich diese Meldung:
Zitat:

Operator not applicable to operand type
Der Cursor steht dann am Ende der Prozedur nach "end" und vor ";"

Wo hab ich den Fehler gemacht???

Thx im Voraus!
MfG Florian

Jan 7. Mär 2003 23:09

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;

Jan 7. Mär 2003 23:37

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.

Christian Seehase 8. Mär 2003 00:25

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:
MoveLeft.Enabled := Ship.Left = (Ship.Left-150);
MoveRight.Enabled := Ship.Right = (Ship.Right+150);
(Das sieht jetzt vielleicht etwas verwirrend aus, deshalb eine kurze Erklärung dazu:
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.

flomei 8. Mär 2003 00:27

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