Hey DPs,
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')) < 0) or (getasynckeystate(ord('S')) < 0) then begin
If (schiff.aky > 2.5) and (getasynckeystate(ord('W')) < 0) then schiff.aky:=schiff.aky+0.005;
If (schiff.aky < 2.5) and (getasynckeystate(ord('S')) < 0) then schiff.aky:=schiff.aky-0.005;
end
else begin
If schiff.aky < 0 then schiff.aky:=schiff.aky+0.005 else
If schiff.aky > 0 then schiff.aky:=schiff.aky-0.005 else
schiff.aky:=0;
end;
if not((getasynckeystate(ord('W')) < 0) or (getasynckeystate(ord('S')) < 0) and (schiff.aky < 0) and (schiff.aky > 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
Pfeiltasten Sicht ändern
Ich danke im vorraus
MfG
Chefx