![]() |
Bewegung
Hallo,
Ich glaube, das diese Frage bestimmt schon oft vorgekommen ist, aber die Antworten waren meistens so komplex, das ich sie als Anfänger nicht verstanden habe. Deshalb wollte ich mich da nochmal genauer erkundigen. Wie schaffe ich es, dass wenn ich auf einen Botton klicke ein Ball, oder halt eine Figur sich von dem Punkt z.b X zum Punk z.b Y bewegt, nicht springt. Also einfach nur eine kleine kurze Bewegung wenn man auf einen Button klickt. |
Re: Bewegung
zum beispiel mit einer doppelten whileschleife:
Delphi-Quellcode:
Hat den Vorteil das es eine "sanfte" gleichmäßige Bewegung von Oben und Links gibt
While (Objekt.Left <> NewPos.X) and (Objekt.Top <> NewPos.y) do
begin if Objekt.Left < NewPos.X then Inc(Objekt.Left) else if Objekt.Left > NewPos.X then Dec(Objekt.Left); if Objekt.Top < NewPos.Y then Inc(Objekt.Top) else if Objekt.Top > NewPos.Y then Dec(Objekt.Top); end; |
Re: Bewegung
mhhhh
Also erhlich gesagt übersteigt das meine Kentnisse. Wie benutze ich diese Schleife den jetzt, und was ist mit "objekt" gemeint. Und was muss der gegenstand der bewegt werden soll den genau sein. Ein Bild vielleicht, oder ein Botton ?? Es wäre sehr nett, wenn das nochmal einer erläutern würde. |
Re: Bewegung
Ich formulier es mal praktischer. ;)
Wenn du beispielsweise ein TImage bewegen möchtestkannst du folgender- maßen vorgehen: Du erstellst einen Timer, aktivierst ihn ("enabled:=true") und erhöhst im OnTimer-Ereignis die Eigenschaft "left" des TImage um 10. Außerdem solltest du mittels if- Abfragen überprüfen, ob das TImage nicht die Grenzen des Formulars über- schreitet. Ist dies der Fall, dann erhöhst du die Eigenschaft "left" einfach nicht mehr, sondern veringerst sie um 10. Wenn du zusätzlich Abbremsung oder Beschleunigung haben möchtest, könntest du die 1 mit einem Abbrems- (<1)oder Beschleunigungs- (>1) Faktor multiplizieren. Da Die Positionen der Delphi- Komponenten aber immer ganz- zahlig sein müssten, würdest du die Werte jetzt noch runden müssen. Edit: Der Faktor muss natürlich größer oder kleiner 1 und nicht, wie ich ge- schrieben hatte größer oder kleiner 0 sein. |
Re: Bewegung
Zitat:
|
Re: Bewegung
Also am sinnvollsten wäre für einen Anfänger sicherlich der Timer! Der führt dir nämlich jede Sekunde - oder die von dir voreingestellte Zeit - einen Code aus, d.h. du brauchst dir nicht selbst eine Schleife zu basteln! Das ganze kann dann so aussehen:
Delphi-Quellcode:
Wenn du das ganze ohne Timer machst und die Schleife wie oben erwähnt heranziehst, dann siehst du den Verschiebungseffekt nicht wirklich, denn die heutigen PCs sind so schnell im Berechnung, dass du die Verschiebung gar nicht mitbekommst! Dort wäre dann ein Application.ProcessMessages angebracht, um eine gewisse Verzögerung zu erzeugen...
procedure TForm1.Timer1(Sender: TObject);
var f : Integer; begin f := 1; // Pixel um wie viel das Image verschoben wird if ((Image1.Left + f) < Form1.ClientWidth) then // Abfrage ob Image1 nach der Verschiebung Image1.Left:= Image1Left + f; // noch auf der Form sichtbar ist, // wenn ja, dann wird das Image verschoben if ((Image1.Top + f) < Form1.ClientHeight) then // Abfrage ob Image1 nach der Verschiebung Image1.Top := Image1.Top + f; // noch auf der Form sichtbar ist, // wenn ja, dann wird das Image verschoben end; mfg shark |
Re: Bewegung
aha, ich glaube so langsam dämmerst mir, wie das zu machen ist.
Auf jeden Fall erst mal danke. Ich probiere das mal aus. |
Re: Bewegung
Also ich glaube bald habe ich es, ich habe mich am anfang nur von dem Schleifenwirwar verunsichern lassen.
Ich zähle nochmal auf was mal alles brauch: Also als erstes ein Objekt, das verschoben werden soll Dann kann man mit Objekt.left fragen ob das Bild rechts oder links aus dem Bildschirm läuft Dann kann man mit Objekt.top fragen ob das Bild oben oder unten aus dem Bildschirm läuft Und mit NewPos.x kann man die neue Position auf der X-Achse festlegen Und mit NewPos.Y kann man die neue Position auf der Y-Achse festlegen Aber ich habe jetzt noch eine kleine Frage: Was ist inc(Objekt.left) ? Und was ist dec(Objekt.top) ? |
Re: Bewegung
Zitat:
dec(Objekt.left) => Objekt.left := Objekt.left - 1; Frank :coder: PS.: RTFM |
Re: Bewegung
Ist das so gemint ???
inc(Objekt.left) = heißt also ojekt 1 nach links dec(objekt.left) = heißt also objekt 1 nach rechts |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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