![]() |
Bewegung-Beschleunigung
ICh versuche einen Federschwinger zu programmieren und dieser soll zur Mitte hin Beschleunigen und zu den Ecken hin Abbremsen. Die Beschleunigung funktioniert zwar aber sie hakt und funktioniert nicht mit allen Werten. Hier ist der Quellcode:
Delphi-Quellcode:
Danke für jede Antwort (kann zur not noch einen screenshot schicken... :lol:
procedure TForm1.Timer1Timer(Sender: TObject);
begin {label1.caption:=timetostr(time);} ko:=0; repeat {Für Überarbeitung weiß} with image1.canvas do begin Pen.Width:=1; Pen.Color:=clwhite; moveto(0,ko); Lineto(image1.Width,ko); end; ko:=ko+1; until ko=image1.Height; with image1.canvas do begin pen.Color:=clblack; moveto(10,image1.Height div 2+20); lineto(10,image1.Height div 2-20); moveto(image1.width-10,image1.Height div 2+20); lineto(image1.width-10,image1.Height div 2-20); moveto(10,image1.height div 2); lineto(image1.width-10,image1.height div 2); end; t1:=timetostr(time); if radiobutton1.Enabled=true then begin; if (x1+x2)/2<(image1.width div 2) then begin x1:=x1+v1; x2:=x2+v1; timer1.Interval:=timer1.Interval-2;//-trunc(vi) end; if (x1+x2)/2>=(image1.width div 2) then begin x1:=x1+v1; x2:=x2+v1; timer1.Interval:=timer1.Interval+2;//-trunc(vi) end; end; if x1>=image1.Width-20 then begin radiobutton1.enabled:=false; radiobutton2.enabled:=true; timer1.Interval:=100; end; if radiobutton2.Enabled=true then begin if (x1+x2)/2>=(image1.width div 2) then begin x1:=x1-v1; x2:=x2-v1; timer1.Interval:=timer1.Interval-2;//-trunc(vi) end; if (x1+x2)/2<(image1.width div 2) then begin x1:=x1-v1; x2:=x2-v1; timer1.Interval:=timer1.Interval+2;//-trunc(vi) end; end; if x2<=20 then begin radiobutton2.enabled:=false; radiobutton1.enabled:=true; timer1.Interval:=100; end; label2.Caption:=timetostr(time); with image1.canvas do begin rectangle(x1,y1,x2,y2); end; procedure TForm1.FormCreate(Sender: TObject); begin x1:=50; x2:=20; y1:=image1.Height div 2+10; y2:=image1.Height div 2-10; timer1.Enabled:=false; radiobutton1.Enabled:=true; radiobutton2.Enabled:=false; label1.caption:=inttostr(image1.Width); v1:=10; vi:=2/((image1.Width-10) div 2); label1.caption:=floattostr(vi); end; [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Bewegung-Beschleunigung
Herzlich Willkommen in der DP! :dp:
Am besten errechnet man die x-Position mit Sinus. Das Intervall vom Timer sollte nicht verändert werden. Wenn du physikalisch genau sein möchtest, dann kannst du dich in ![]() Ansonsten etwas abgekürzt: [Vorkau=ON]
Delphi-Quellcode:
[Vorkau=OFF]
type
TForm1 = class(TForm) Timer1: TTimer; Image1: TImage; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Winkel,v1,y1,y2: Integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var Pos: Integer; begin With Image1.Canvas do begin Pen.Color:=clWhite; // Für Überarbeitung weiß Brush.Color:=clWhite; Rectangle(0,0,Image1.Width,Image1.Height); Pen.Color:=clblack; MoveTo(10,Image1.Height div 2+20); LineTo(10,Image1.Height div 2-20); // | MoveTo(Image1.Width-10,Image1.Height div 2+20); LineTo(Image1.Width-10,Image1.Height div 2-20); // | MoveTo(10,Image1.Height div 2); LineTo(Image1.Width-10,Image1.Height div 2); // --- end; Winkel:=(Winkel+v1)mod 360; Pos:=round( Image1.Width/2 + sin(Pi*Winkel/180)*(Image1.Width/2-25) ); // Sinus wird von Rad nach Deg umgerechnet Image1.Canvas.rectangle(Pos-10,y1,Pos+10,y2); end; procedure TForm1.FormCreate(Sender: TObject); begin y1:=Image1.Height div 2-10; y2:=Image1.Height div 2+10; v1:=3; Winkel:=0; Timer1.Interval:=40; // oder im Objektinspektor einstellen - 1000/40 -> 25 "Bilder" pro Sekunde end; end. |
Re: Bewegung-Beschleunigung
Liste der Anhänge anzeigen (Anzahl: 1)
:arrow: "Screenshot": :)
|
Re: Bewegung-Beschleunigung
Dankeschön
Das ich darauf nicht selbst gekommen bin (wäre das naheliegenste gewesen....) :wall: Danke Danke Danke :cheers: :spin: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 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