Autor Beitrag
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 12.08.07 21:04 
Hi,

ich habe ein kleines Programm (noch kann es eigentlich nichts :wink: ) mit DelphiX geschrieben. Ich habe ein paar verschieden Grastexturen (100x100Pixel) die ich als Grasfläche zeichnen lasse. Das ganze sieht so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  if GetTickCount-TimebasedMovementTime>1000/50 then //50fps
    begin
      DXDraw.Surface.Fill($FF00FF);
      //verschiebe die Ansicht um 3/3
      Graphic.Move(3,3);
      //Zeichne das Gras
      Graphic.PaintFloor;
      //Ein Bildchen, dass mir die FPS anzeigt (natürlich nur, wenn man das if oben ausklammert)
      CarsPics.Items[0].DrawRotate(DXDraw.Surface,round(DXDraw.Width*0.5),round(DXDraw.Height*0.7),20,43,0,0.5,0.5,LagCount);
      DXDraw.Flip;
      TimebasedMovementTime:= GetTickCount;
    end;


das ganze liefert mir so ca. 15FPS, was irgendwie sehr wenig ist. Wenn ich etwas an der if-Abfrage rumspiele, und z.B. das 50 durch ein 30 ersetze, tauchen plötzlich viel mehr ruckler auf. deßhalb denke ich, dass es mit dem Monitor zusammenhängt, dass die Wiederholrate des Monitors und des Programms nicht zusammenpassen und so ein ruckeln entsteht. WaitVBlank habe ich aber aktiviert. An meinem andren Code liegt es nicht, irgendwie gehe ich noch mit dem DelphiX falsch um, denn auch ohne der Graphic.Move procedure steigen die FPS nicht und es ruckelt wie bisher.

Ich hoffe ein DelphiX-Kenner hat Zeit und kann mir weiterhelfen :D

Thx schonmal,

Xion

//Edit: die PaintFloor procedure macht ca. 20*20 ein FloorPics.Items[0].Draw, wobei FloorPics ein TDXImageList ist

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 12.08.07 21:20 
Argh, du bremst das ganze auch mit dem If auf genau 50fps aus.
Probier mal, nur den für die Bewegung zuständigen Part ins if zu packen und den Rest ungebremst laufen zu lassen.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 13.08.07 08:55 
Hi,
jo, habs probiert, bringt nichts. Mir ist schon klar dass es dann nur noch 50fps sein können, aber auch ohne dem ganzen if ruckelt es. Und auch wenn ich garnichts malen lasse (außer dem Fill) sehe ich diese Sprünge von LagCount von 15 auf 80.

Xion

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 13.08.07 11:05 
Hi,

habe mir jetzt eine while schleife gemacht und auf vollbild umgeschaltet. Funzt prima :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 while (StopPainting=False) do
   begin
      Graphic.Move(PlayerCar.V*sin(degtorad(PlayerCar.Angle)),-PlayerCar.V*cos(degtorad(PlayerCar.Angle)));
      Steerage.ReadKeyPress;
      DXDraw.Surface.Fill($FF00FF);
      Graphic.PaintFloor;
      CarsPics.Items[0].DrawRotate(DXDraw.Surface,round(DXDraw.Width*0.5),round(DXDraw.Height*0.7),20,43,0,0.5,0.5,round(255/360*PlayerCar.Angle));
      DXDraw.Flip;
   end;


Xion

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)