![]() |
3 Timer für eine gleichmäßige Beschleunigung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
Ich bin gerade dabei ein Program zu erstellen, in dem eine Kugel vom Benutzer gleichmäßig beschleunigt werden kann. Nach etlichen Stunden Tipparbeit habe ich es mal mit F9 versucht und..... es ist mir überhaupt nicht möglich die Kugel zu beschleunigen/bewegen/steuern :wall: Ich guck die ganze zeit wie blöd auf meien code und finde einfach nicht den Fehler /die Fehler! Wäre echt cool wenn sich jemand findet, der mir ein bischen unter die Arme greift. Ihr kennt das ja selber manchmal muss der Blickwinkel gewechselt werden. ps:mein Gedanke: Ich habe 2 Timer (VxTimer/VyTimer) mit denen die Geschwindigkeit der Kugel im Raum bestimmt wird. Nach jedem Abschluss ihres veränderlichen Intervalls wird die Kugel jeweils um einen Pixel verschoben. Ein Timer (a) ist für die gleichmäßige Änderung beider Geschwindigkeiten (also für die Beschleunigung) zuständig. Dabei greift mein Programm auf den nächsten bzw. vorherigen wert in dem array Vx zu. Anschließend wird die Bewegungsrichtung bestimmt. |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Hallo,
also bei mir geht es... Aber eben seeehr langsam. Über die Großschreibtaste und mit "W", "A", "S" und "D" kann die Kugel "gesteuert" werden. Du müsstest die Werte noch anpassen (z.B. den Wertbereich von [VX]. Weiterhin scheint das "reseten" nicht zu funktionieren. (wenn man die Taste wechselt) |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Der Ball müsste sich aber viel schneller bewegen
(dazu aber erst beschleunigen - bis auf 80 Pixel pro Sekunde).
Delphi-Quellcode:
(j=1,vx[1] = 1000 div 80 = 12
for j:=1to 40 do begin
vx[j]:= 1000 div ((41-j)*2); |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Delphi-Quellcode:
begin
for j:=1to 40 do begin vx[j]:= 1000 div ((41-j)*2); end; //VX[40]:=500;1. Mal 500 VX[41]:=999999 ; for k:=42to 81 do begin vx[k]:= 1000 div ((k-41)*2);//versuch mal mit vx[k]:= 1000 div ((k-41)*2)+ 1 end; //VX[42]:=500;//2. Mal 500
Delphi-Quellcode:
if rechtsklick then begin
for i := 81 downto 2 do begin if (vxTimer.Interval=vx[i]) and not abbruchderschleife then begin vxTimer.Interval:=vx[i-1];//hier mal einen Breakpoint setzen! Interval ist entweder 500 oder 999999, da 500 2 Mal im Array vorkommt einmal vor 999999 und einmal dahinter, daduch wird immer hin und her geschaltet |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Also....
Ich hab's noch mal probiert: Es ist doch bei dem Program unmöglich die gespiegelte Seite im Array wegzulassen. Ich wüsste jedenfalls nicht wie. ? warum sollte ich es mit ''K'' versuchen gibt es da einen grundlegenden Unterschied? Und was für ein Breakpoint meinst du? :gruebel: |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Ich habe vorgeschlagen bei der 2. Schleife 1 dazu zu addieren, dann wird aus 500 501.
Delphi-Quellcode:
Bei mir hatte sich dann jedenfalls die Geschwindigkeit geändert, zumindest wenn ich mehrmals D gedrückt hatte.
vx[k]:= 1000 div ((k-41)*2)+ 1;
Sonst hat der Timer immer nur den Intervall 500 oder 999999. Einen Breakpoint setzt man für den Debugger, damit kann man dann die Variablen auslesen. Ansonsten setze doch einfach mal eine Listbox zu Testzwecken auf die Form und fügst dann folgenden Code ein, damit kannst du dann den Timer Interval anzeigen lassen, wenn du die Taste D drückst. Listbox1.Enabled muss im OI auf false gesetzt werden, ansonsten wird onKeyDow der Form nicht ausgelöst.;
Delphi-Quellcode:
if rechtsklick then begin
for i := 81 downto 2 do begin if (vxTimer.Interval=vx[i]) and not abbruchderschleife then begin vxTimer.Interval:=vx[i-1]; Listbox1.Items.Add(inttostr(vxTimer.Interval));//nur zur Demo |
Re: 3 Timer für eine gleichmäßige Beschleunigung
Ist es nicht besser, wenn das Intervall des ersten Timers immer gleich bleibt und der zweite Timer die Geschwindigkeit (Pixel/Sekunde) erhöht? (Theoretisch reicht dir dann auch nur ein Timer).
Du musst den ersten Timer ja nur so einstellen, dass das menschliche Auge eine flüssige Bewegung wahrnimmt. Dann kannst du die Geschwindigkeit beliebig groß einstellen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 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