![]() |
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:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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