Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   IDLE nur bei Aktionen ausgeführt? (https://www.delphipraxis.net/145963-idle-nur-bei-aktionen-ausgefuehrt.html)

Chefx 11. Jan 2010 15:36


IDLE nur bei Aktionen ausgeführt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey DPs, :hi:

Ich hab ein Problem mit der IDLE Procedure, die wird nur ausgeführt wenn man irgendwas in der auch macht also Taste drücken oder maus bewegen. Ich Programmiere gerade ein Spiel mit OpenGL und wenn ich da eine Taste drücke (ruckelt es) und wenn man da noch die maus bewegt läuft es normal, aber warum ist das so ?

hier mal der code:

Delphi-Quellcode:
procedure TForm1.Idle(Sender: TObject; var Done: Boolean);
begin

  LoopTime := gettickcount-starttime;
  TimeFactor := LoopTime*0.00000000001+1;
  StartTime := gettickcount;
  If xspeedtrain < 10 then xspeedtrain:=xspeedtrain+0.01;

  // Schiff Speedsystem
  If (getasynckeystate(ord('W')) &lt; 0) or (getasynckeystate(ord('S')) &lt; 0) then begin
    If (schiff.aky > 2.5) and (getasynckeystate(ord('W')) &lt; 0) then schiff.aky:=schiff.aky+0.005;
    If (schiff.aky &lt; 2.5) and (getasynckeystate(ord('S')) &lt; 0) then schiff.aky:=schiff.aky-0.005;
  end
  else begin
    If schiff.aky &lt; 0  then schiff.aky:=schiff.aky+0.005 else
    If schiff.aky &gt; 0  then schiff.aky:=schiff.aky-0.005 else
      schiff.aky:=0;
  end;
  if not((getasynckeystate(ord('W')) &lt; 0) or (getasynckeystate(ord('S')) &lt; 0) and (schiff.aky &lt; 0) and (schiff.aky &gt; 0)) then
  schiff.transy := schiff.transy + ( schiff.aky*Timefactor);
  Render;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle:=idle;
end;

Die exe zum testen ist im Anhang.
Steuerung:
S vorwärts :-D
Pfeiltasten Sicht ändern


Ich danke im vorraus

MfG
Chefx

Uwe Raabe 11. Jan 2010 16:35

Re: IDLE nur bei Aktionen ausgeführt?
 
Idle wird aufgerufen, wenn die Message-Queue leer ist und die Applikation in den Idle-Zustand übergeht. Willst du weiterhin OnIdle-Ereignisse bekommen, musst due Done := false setzen. Alternativ geht aber auch ein Timer.

Chefx 11. Jan 2010 17:16

Re: IDLE nur bei Aktionen ausgeführt?
 
danke Uwe Raabe,Problem gelöst :thumb: :thumb: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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