![]() |
Mehrere If-Abfragen
Hey, hab mal ne "Anfängerfrage".
Ich möchte abfragen, ob sich ein Bild (das ich bewege, Konzept: Jump&Run-Game) über einem Panel befindet nach einem Sprung, damit es dann auf dem Panel landen kann und nicht wieder auf den Boden geht. Eigentlich hätte ich dann jetzt das so geschrieben:
Delphi-Quellcode:
Wenn ich starten will, geht der Cursor hinter das Then und der Fehler "Incompatible Types" erscheint.
If Image1.Left>=Panel1.Left and Image1.Left<=Panel1.Left+Panel1.Width
Then Image.Top:=Image1.Top-Panel1.Height; Der Fehler hierin liegt offensichtlich im "and", aber wie kann ich sonst mehrere Sachen überprüfen? |
AW: Mehrere If-Abfragen
Zitat:
Delphi-Quellcode:
Sollte es nicht Image1.top heißen?
If (Image1.Left>=Panel1.Left) and (Image1.Left<=Panel1.Left+Panel1.Width)
Then Image{1}.Top:=Image1.Top-Panel1.Height; Grüße Klaus |
AW: Mehrere If-Abfragen
Äh ja, natürlich. War eben nur hingeschmiert^^
Auf jeden Fall danke dafür. Jetzt setz ich mich mal weiter hin, und gucke, wieso es noch nicht geht :P (Also der beabsichtigte Effekt). Sollte ich es nicht hinkriegen (wovon ich nicht ausgehe), melde ich mich wieder xD Edit: Kann ich ein and auch nach Then verwenden? Edit2: Hat sich schon erledigt, man bin ich blöd :D |
AW: Mehrere If-Abfragen
Zitat:
Edit: Da war ich wohl etwas zu langsam - hat sich ja doch von selbst ergeben. |
AW: Mehrere If-Abfragen
Japp, hab ich noch mal Glück gehabt, bevor ich wieder noch blöder dagestanden hätte^^
Wie dem auch sei, hab jetzt wieder eine Stelle, wo ich nicht weiter komme.
Delphi-Quellcode:
Das ist das, was bei einem Sprung (VK_UP) passiert. Aber die Figur (das Image1) springt jetzt immer wieder auf den Boden zurück, also er bleibt nicht auf dem Kasten (Panel1) stehen. Kann mir wer sagen, wieso? :stupid: (den Smiley musste ich ausprobieren :D )
procedure TForm1.Timer1Timer(Sender: TObject);
begin wiederholungen:=wiederholungen+1; if Image1.Visible=True Then begin if wiederholungen<=14 Then Image1.Top:=Image1.Top-wert; if wiederholungen>=15 Then Image1.Top:=Image1.Top+wert; if wiederholungen=28 Then begin Timer1.Enabled:=False; wiederholungen:=0; end; end; if Image2.Visible=True Then begin if wiederholungen<=14 Then Image2.Top:=Image2.Top-wert; if wiederholungen>=15 Then Image2.Top:=Image2.Top+wert; if wiederholungen=28 Then begin Timer1.Enabled:=False; wiederholungen:=0; end; end; If (Image1.Left>=Panel1.Left) and (Image1.Left<=Panel1.Left+Panel1.Width) and (Image1.Top+Image1.Height=Panel1.Top) Then begin Image1.Top:=Panel1.Top-Image1.Height; Timer1.Enabled:=False; end; if Image1.Visible=True Then Image2.Top:=Image1.Top; if Image2.Visible=True Then Image1.Top:=Image2.Top; end; Edit: Noch zur Erläuterung: Image1 ist die Spielfigur, die nach rechts guckt und Image2 das ganze gespiegelt, also nach links. |
AW: Mehrere If-Abfragen
Image1.Top+Image1.Height wird wohl nie geanu den Wert von Panel1.Top haben
BTW: Boolean-Werte nie auf True überprüfen. .Visible ist ja sschon ein Boolean. Zudem ist wahr als nicht falsch (0) deklariert und die Konstante True als 1. Ich würde auch anders einrücken |
AW: Mehrere If-Abfragen
Zitat:
Wenn ich also springe sinkt der Wert von Image1.Top+Image1.Height auf eine Größe, die über Panel1.Top liegt, liegt aber zwischndurch genau auf der Höhe. Image1.Top:=372 Image1.Height:=43 Image1.Top+Image1.Height:=415 Panel1.Top:=375 Sprung: 14*5px=70px 415-70=345 345<375 Und da ich in 5er Schritten gehe, wird genau die Position auch erwischt zwischendurch (2x). Zitat:
|
AW: Mehrere If-Abfragen
Markus meinte das in etwa so:
Delphi-Quellcode:
if Image1.Visible Then
... |
AW: Mehrere If-Abfragen
Wie wäre es erstmal deinen Variablen vernünftige Namen zu geben?
Dann ist es viel angenehmer und erspart unnötige erklärungen. |
AW: Mehrere If-Abfragen
Zitat:
|
AW: Mehrere If-Abfragen
Ich vermute, er meinte statt Variablen die Komponenten.
|
AW: Mehrere If-Abfragen
Jo, hab ich auch das Gefühl. Also nehm ich dazu mal Stellung: Es ist einfacher immer Image[x] zu schreiben, als Image_Mario_guckt_nach_links oder sowas, auch wenns jetzt übertrieben ist. Abgesehen davon ist es ja eigentlich auch nur für mich. Außerdem spielt das ja für meine eigentliche Rolle gar keine Frage. Deshalb auch die Bitte, jetzt wieder zum Problem zurück zu kommen^^
|
AW: Mehrere If-Abfragen
Wie Markus bereits sagte, hast Du keine Toleranz eingebaut, die Abfrage wird also nicht wahr, wenn die aktuelle Y-Position nicht aufs Pixel genau stimmt. Und nochmal zur Namensgebung: wir kennen Deine Oberfläche nicht, können also mit Panel3 oder so nichts anfangen. Jetzt sag Du mir doch, was besser lesbar ist:
Delphi-Quellcode:
oder
procedure TForm1.Image23Click(Sender: TObject);
begin Label34.Caption := Edit12.Text + ':' + Label42.Caption; end;
Delphi-Quellcode:
(Das ist zwar immer noch schlechter Stil, aber man kann anhand der Bezeichner zumindest erahnen, was die Komponenten darstellen sollen).
procedure TFormMain.imgFigurClick(Sender: TObject);
begin lblSpielstand.Caption := edtPunkte.Text + ':' + lblZeit.Caption; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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