Entwickler-Ecke
Sonstiges (Delphi) - Bilder bewegen nach links und rechts?
Kujo - Mi 07.03.07 19:44
Titel: Bilder bewegen nach links und rechts?
Hi leute
Ich will, dass sich 10 bilder erst nach rechts bewegen und ab einem bestimmten punkt wieder umdrehen und sich nach links bewegen.
Die Rechtsbewegung habe ich aber wie geht es weiter?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if image34.visible = true then image34.left:=image34.Left+1; if image35.visible = true then image35.left:=image35.Left+1; if image38.visible = true then image38.left:=image38.Left+1; if image39.visible = true then image39.left:=image39.Left+1; if image40.visible = true then image40.left:=image40.Left+1; if image41.visible = true then image41.left:=image41.Left+1; if image42.visible = true then image42.left:=image42.Left+1; if image43.visible = true then image43.left:=image43.Left+1; if image44.visible = true then image44.left:=image44.Left+1; if image45.visible = true then image45.left:=image45.Left+1; if image46.visible = true then image46.left:=image46.Left+1; if image47.visible = true then image47.left:=image47.Left+1; if image48.visible = true then image48.left:=image48.Left+1; |
JayEff - Mi 07.03.07 19:49
:welcome: in der Entwickler-Ecke auch dir!
Eine Bewegung in die andere Richtung bekommst du, in dem du die Geschwindigkeit negativ machst, etwa so:
Delphi-Quelltext
1:
| image34.left:=image34.Left-1; |
PS: Die Delphi-Tags unseres Forums, über die dein Quelltext schön formatiert wie in Delphi selbst aussieht, funktionieren so:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGe5dde9cb16212532dfe10201830a1686}</span></span>
Ist ne klasse Funktion und jeder liebt sie ;)
Marco D. - Mi 07.03.07 19:51
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var i: integer; img: TImage; for i := 34 to 48 do begin img := TImage(FindComponent('image' + inttostr(i))); if (img.left < myposition) then img.left := img.left + 1; else img.left := img.left - 1; end; |
Kujo - Mi 07.03.07 19:53
cool danke ich probier das gleich mal
Dragonclaw - Mi 07.03.07 19:54
Hallo,
du kannst einfach abfragen ob die Rechte Seite des images einen bestimmten Punkt überschritten hat.
Delphi-Quelltext
1:
| if Image34.left + Image34.width >= 400 then ... |
Da wird also abgefragt ob die RECHTE Seite des Images >= als 400 ist, sobald das eintritt musst du einfach nur den Bewegungsvektor ändern.
Delphi-Quelltext
1:
| if Image34.left + Image34.width >= 400 then dx := -dx |
Hier wird dx einfach negativ gemacht.
Deinen Code zur Bewegung musst du dann natürlich an dx anpassen.
@Marco D. : So springt das Image immer von einem Punkt zum anderen, da ja nur solange nach rechtsverschoben wird wie img.left < als eine bestimmte position ist, dann wird wieder abgezogen, damit ist img.left wieder kleiner und es wird wieder in die andere Richtung geschoben.
Kujo - Mi 07.03.07 20:05
Also ich hab es so probiert
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Timer3Timer(Sender: TObject); var x: integer; img: TImage; begin
image1.Visible:=true; image38.Visible:=true; image35.Visible:=true; image34.Visible:=true; image39.Visible:=true; image40.Visible:=true; image41.Visible:=true; image42.Visible:=true; image43.Visible:=true; image44.Visible:=true; image45.Visible:=true; image46.Visible:=true; image47.Visible:=true; image48.Visible:=true;
for x := 34 to 48 do begin img := TImage(FindComponent('image' + inttostr(x))); if (img.left < 600) then img.left := img.left + 1 else img.left := img.left - 10; end; end; |
Das problem ist, dass es sich nur kurz mit img.left - 10 zurückbewegt und dann wieder nach rechts. Es macht also sofort wieder eine rechtsbewegung und läuft nich wieder bis nach links zurück. Was kann man da jetzt machen?
Dragonclaw - Mi 07.03.07 21:22
Wie oben schon geschrieben musst du für jedes Bild nen Geschwindigkeitsvektor haben. Den machst du negativ wenn das bild nach links soll und positiv wenn das Bild nach rechts soll.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| Var dx: Array[34..48] of Integer; procedure TForm1.Timer3Timer(Sender: TObject); var x: integer; img: TImage; begin
image1.Visible:=true; image38.Visible:=true; image35.Visible:=true; image34.Visible:=true; image39.Visible:=true; image40.Visible:=true; image41.Visible:=true; image42.Visible:=true; image43.Visible:=true; image44.Visible:=true; image45.Visible:=true; image46.Visible:=true; image47.Visible:=true; image48.Visible:=true;
for x := 34 to 48 do begin img := TImage(FindComponent('image' + inttostr(x))); if (img.left < 600) then dx[x] := 5;
if (img.left <= 0 then dx[x] := -5;
img.left := img.left + dx[x]; end; end; |
JayEff - Mi 07.03.07 22:23
Kujo hat folgendes geschrieben: |
Was kann man da jetzt machen? |
Das else weglassen und statt dessen eine neue Abfrage machen. Sobald einmal 10 abgezogen wurden von dem left ist dieses schon nicht mehr <600 und die Abfrage geht in den Else-Teil. Richtig wäre:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var speed: integer; begin if image1.left > 600 then speed := -5;
if image1.left < 50 then speed := 5;
image1.left := image1.left + speed; end; |
wobei du speed als array definieren solltest und für jedes Image eine eigene Speed-Variable (Entspricht dem von Dragonclaw angesprochenen Geschwindigkeitsvektor) benutzen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!