| Autor |
Beitrag |
Xion
      

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)
|
Verfasst: So 12.08.07 21:04
Hi, ich habe ein kleines Programm (noch kann es eigentlich nichts  ) mit DelphiX geschrieben. Ich habe ein paar verschieden Grastexturen (100x100Pixel) die ich als Grasfläche zeichnen lasse. Das ganze sieht so aus: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if GetTickCount-TimebasedMovementTime>1000/50 then begin DXDraw.Surface.Fill($FF00FF); Graphic.Move(3,3); 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,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 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
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: 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 
      

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)
|
Verfasst: 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 
      

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)
|
Verfasst: Mo 13.08.07 11:05
Hi,
habe mir jetzt eine while schleife gemacht und auf vollbild umgeschaltet. Funzt prima
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)
|
|
|