Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 3 Timer für eine gleichmäßige Beschleunigung (https://www.delphipraxis.net/85642-3-timer-fuer-eine-gleichmaessige-beschleunigung.html)

Flo.Hoe 2. Feb 2007 15:59


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.

juergen 2. Feb 2007 18:04

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)

Flo.Hoe 2. Feb 2007 18:12

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:
 for j:=1to 40 do begin
    vx[j]:= 1000 div ((41-j)*2);
(j=1,vx[1] = 1000 div 80 = 12

bitsetter 2. Feb 2007 19:55

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

Flo.Hoe 2. Feb 2007 23:36

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:

bitsetter 2. Feb 2007 23:49

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:
vx[k]:= 1000 div ((k-41)*2)+ 1;
Bei mir hatte sich dann jedenfalls die Geschwindigkeit geändert, zumindest wenn ich mehrmals D gedrückt hatte.
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

blablab 3. Feb 2007 08:16

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 21:08 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