AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bewegung

Ein Thema von Z32 · begonnen am 1. Apr 2006 · letzter Beitrag vom 10. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Z32
(Gast)

n/a Beiträge
 
#1

Bewegung

  Alt 1. Apr 2006, 17:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Bewegung

  Alt 1. Apr 2006, 17:13
zum beispiel mit einer doppelten whileschleife:

Delphi-Quellcode:
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;
Hat den Vorteil das es eine "sanfte" gleichmäßige Bewegung von Oben und Links gibt
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Z32
(Gast)

n/a Beiträge
 
#3

Re: Bewegung

  Alt 1. Apr 2006, 17:34
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.
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#4

Re: Bewegung

  Alt 1. Apr 2006, 17:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Bewegung

  Alt 1. Apr 2006, 19:05
Zitat von Z32:
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.
Anstelle von "Objekt" musst du den namen des Image-Objects eintragen und NewPos.x bzw y muss dann die neue position sein (kannst auch direkt eine zahl schreiben)
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Bewegung

  Alt 1. Apr 2006, 19:29
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:
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;
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...

mfg shark
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Z32
(Gast)

n/a Beiträge
 
#7

Re: Bewegung

  Alt 2. Apr 2006, 15:32
aha, ich glaube so langsam dämmerst mir, wie das zu machen ist.

Auf jeden Fall erst mal danke. Ich probiere das mal aus.
  Mit Zitat antworten Zitat
Z32
(Gast)

n/a Beiträge
 
#8

Re: Bewegung

  Alt 4. Apr 2006, 19:34
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) ?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Bewegung

  Alt 4. Apr 2006, 19:40
Zitat von Z32:
Was ist inc(Objekt.left) ?
Und was ist dec(Objekt.top) ?
Inc(Objekt.left) => Objekt.left := Objekt.left + 1;
dec(Objekt.left) => Objekt.left := Objekt.left - 1;

Frank

PS.: RTFM
  Mit Zitat antworten Zitat
Z32
(Gast)

n/a Beiträge
 
#10

Re: Bewegung

  Alt 5. Apr 2006, 17:53
Ist das so gemint ???

inc(Objekt.left) = heißt also ojekt 1 nach links
dec(objekt.left) = heißt also objekt 1 nach rechts
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz