Zitat von
Flo.Hoe:
Und wie kann ich ohne Timer auskommen?
Beschleunigte Bewegungen (zumindest gleichmässig beschleunigte Bewegungen, für andere ist a auch zeitabhängig) lassen sich immer wie folgt darstellen:
Und die Zeit wächst linear. Also wirds einfach: Du brauchst nur eine Schleife durchlaufen und die Zeit, die sich ja bei jedem Durchlauf der Schleife erhöht, als Parameter t in die Gleichung einzusetzen.
That's it.
Delphi-Quellcode:
procedure Move (picture : TPicture) ;
var
t0 : integer ;
t : double ;
begin
t0 := gettickcount ; // in ms
while True do begin
t := (gettickcount - t0) / 1000 ;
x := 1/2 * a * t * t + v0 * t + x0 ; // a, v0 und x0 sind Konstanten ;
picture.left := x ;
// Eventuell ein Sleep einbauen, wenn die Prozessorlast zu hoch steigt
// Und eine Abbruchbedingung der Schleife
end ;
end ;