Entwickler-Ecke
Sonstiges (FPC / Lazarus) / Linux API - Ein Bild von A nach B bewegen
leuchtfeuer - Mi 15.02.17 19:56
Titel: Ein Bild von A nach B bewegen
Hallo :D ,
ich bin neu hier und ich hoffe auf die Hilfe von vielleicht einem schlauen Köpfchen :)
Ich möchte eine Rennstrecke programmieren. Das heißt am Start stehen zwei bis drei Personen, welche sich dann in einer bestimmten Zeit auf der x-Achse nach rechts bewegen, damit sie im Ziel ankommen.
Leider bin ich kein Profi im Programmieren und noch recht unerfahren, deshalb weiß ich nicht wirklich, wie ich das ganze beginnen soll.
Wenn jemand Vorschläge oder eine Hilfestellung weiß, wäre ich ihm sehr dankbar, wenn er sie vielleicht mit mir teilen würde.
Für manche mag das bestimmt recht simpel sein, nur leider für mich nicht :oops:
Delete - Mi 15.02.17 20:57
- Nachträglich durch die Entwickler-Ecke gelöscht -
leuchtfeuer - Mi 15.02.17 21:27
Dankeschön, du hast mir damit meinen Abend gerettet. Ich war schon kurz vor der Verzweiflung :D
Eine Frage hab ich noch. Das Bild bewegt sich ja jetzt in einer Endlosschleife nach rechts. Kann ich irgendwie einen Endpunkt festlegen?
Ich hab es mit einer Schleife versucht und am Ende geschrieben
until panel1.Left = 10;
Aber das sieht bei mir sehr merkwürdig aus XD
Delete - Do 16.02.17 02:37
- Nachträglich durch die Entwickler-Ecke gelöscht -
Slipstream - Do 16.02.17 09:12
Sagen wir mal du hast eine TImage mit dem Hintergrundbild und darin bewegst du nun deine Grafik. Unten im Hintergrundbild ist die Strasse von links nach rechts abzulaufen. Die Strasse beginnt sagen wir mal bei x = 10 und endet bei x = 500. Nun musst du dir überlegen, wie schnell sich die Grafik bewegen soll: In welcher Zeit soll die Grafik von 10 bis 500 laufen? Sagen wir mal, dieser Weg soll in 20 Sekunden zurückgelegt werden. Dann bewegst du die Grafik in jeder Sekunde um (500 -10) / 20 Pixel, das wären rund 24 Pixel pro Timerdurchlauf, wenn du den Timer auf 1 Sekunde (1000 Millisekunden) stellst. Wenn du mehrere Grafiken unterschiedlich laufen lassen willst, dann legst du die Schrittweite bei den verschiedenen Laufgrafiken unterschiedlich fest. Im Timer-Ereignis bewegst du dann die Grafiken mit ihrer individuellen Schrittweite: Grafik1.left := Grafik1.Left + Grafik1.Tag ... wenn du die Schrittweite z.B. in der Tag-Eigenschaft speicherst.
Dann musst du noch berücksichtigen, dass die Laufgrafiken eine bestimmte Breite haben, du aber nicht möchtest, dass die Laufgrafik, sagen wir mal mit der Breite 30 Pixel, über das Strassenende hinausbewegt wird. Deshalb fragst du im Timer-Ereignis vor dem Bewegen der Laufgrafik ab, ob ihr rechter Rand an das Strassenende stösst, wenn du sie mit ihrer Schrittweite bewegst:
Delphi-Quelltext
1: 2: 3:
| If Grafik1.Left + Grafik1.Tag + Grafik1.Width <= 500 Then Grafik1.left := Grafik1.Left + Grafik1.Tag Else Grafik1.Left := Grafik1.Left - Grafik1.Tag; |
Dasselbe machst du dann mit den anderen Laufgrafiken.
Um keine Endlosschleife zu produzieren, verwendest du je einen Start- und einen Stop-Button:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Procedure Form1.ButtonStartClick(Sender: TObject); begin Grafik1.Left := 10; Grafik2.Left := 10; Grafik ... MyTimer.Enabled := True; end; |
Ein zweiter Button soll das Anhalten ermöglichen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Procedure Form1.ButtonHaltClick(Sender: TObject); begin MyTimer.Enabled := False; end;
Procedure Form1.MyTimerTimer(Sender: TObject); begin If Grafik1.Left + Grafik1.Tag + Grafik1.Width <= 500 Then Grafik1.left := Grafik1.Left + Grafik1.Tag Else Grafik1.Left := Grafik1.Left - Grafik1.Tag; If Grafik2 ... Application.Processmessages; end; |
Alles im Foreneditor getippt und ungeprüft. Soll auch nur als Hinweis dienen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!