Entwickler-Ecke
Multimedia / Grafik - FPS sind am schwanken
schnig - Sa 28.06.03 12:16
Titel: FPS sind am schwanken
Ich hab vor ein paar Tagen angefangen mit DelphiX zu programieren...
Mein erstes Projekt war ein kleines 2d Spiel in dem mein Held und paar "gegner" zu finden waren.. NUR: Wieso bewegen sich die nicht gleichmässig? ;) Naja die fps sind am schwanken und alles läuft durch die geschwindigkeits veränderungen mehr schlecht als recht :( Gibt es da irgendwas was man beachten soll? Wenn wer meinen aktuellen source haben möchte um mir zu helfen: einfach email hinterlassen X)
thx sNg :-)
Moderiert von
Tino: Titel geändert.
mortus - Sa 28.06.03 13:48
du koenntest die framerate begrenzen, indem du am ende des frames eine while-schleife laufen laesst und misst, wann die gewuenschte frame-dauer (1000/fps [in ms]) erreicht ist.
z.b. so:
Delphi-Quelltext
1:
| while (GetCurrentTime()-FrameStartTime < Framedauer) do; |
oder du machst die bewegung deiner objekte abhaengig von der framedauer, z.b. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| var StartTime,EndTime,Frequency:TLargeInteger; TimeThisFrame: Single; ... begin QueryPerformanceFrequency(Frequency); QueryPerformanceCounter(StartTime); ... ... repeat QueryPerformanceCounter(EndTime); until (EndTime <> StartTime);
TimeThisFrame:=(EndTime-StartTime)/Frequency; StartTime:=EndTime;
PositionX:=PositionX+SpeedX*TimeThisFrame; end; |
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
mimi - Sa 28.06.03 20:37
ja: DXTimer1.Interval:=0
poste doch mal code den du ins dxtimer ereignis geschrieben hast.
Mr_T - Sa 28.06.03 20:42
Also ich würde am ehesten Mortus 2. Vorschlag beachten, da das das einzig sichere ist....
Den ersten Vorschlag, die Framerate zu bremsen hilft auch nur, wenn zuviele Frames da sind... erreicht das ganze eine zu niedrige FPs, kann man das vergessen....
Die Sache mit dem DX-Timer würde ich auch nicht probieren... versucht man das, dann rendert der Rechner einfach so schnell wie gerade bei der Szene möglich... diese Speed ist logischerweise auf jedem Rechner anders und innerhalb einer Szene sogar Schwankend, so dass diese unbraucbar zur Problemlösung sein dürfte.....
mimi - So 29.06.03 12:28
das wäre mir neu: wenn du den interval auf 1000 ms läst wird nur jede sekunde das bild neu gemalen, und das führt dazu das es ruckelt und so....
schnig - So 29.06.03 16:08
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| if not DXDraw1.CanDraw then Exit; punkte:= punkte+1; DXInput1.Update; DXDraw1.Flip; DXSpriteEngine1.Move(1); DXDraw1.Surface.Fill(0); DXSpriteEngine1.Draw; with DXDraw1.Surface.Canvas do begin Brush.Style := bsClear; Font.Color := clWhite; Font.Size := 12; Textout(0,0, 'ESC to quit'); Textout(680, 0,'Punkte: '+inttostr(punkte)); release; end; |
So hatte ichs am anfang...
Moderiert von
Tino: Code- durch Delphi-Tag ersetzt.
mimi - So 29.06.03 17:11
auf was steht bei dir der DXTimer ?
schnig - So 29.06.03 17:50
intervaltechnisch auf 10.. läuft am besten so wies aussieht
mimi - So 29.06.03 18:15
setzt ihn doch mal auf 0 das wird er immer akualliesiert:)
aber man müsste irgwie den besten wert errechnen können....
schnig - So 29.06.03 18:33
naja da isser scho schneller nur nicht gleichmässig...
Und das ist imho das wichtigste :(
Aber vielelicht schick ich dir einfach mal alles und du schaust mal? .. wenn du lust und zeit hast :p
mimi - So 29.06.03 18:39
habe dir ne PM gesendet, ich will mir mal angewönen meine mail addresse hier nicht mehr einfach ins forum zu schreiben:) wegen der Spam gefahr :evil:
mortus - So 29.06.03 19:57
ich kann dir nur zu der 2. methode aus meinem post raten. habe schon mehrere kleine spiele programmiert und damit nie groessere probleme gehabt. die implementation ist einfach und die performance leidet aufgrund der hinzukommenden multiplikationen auch nur leicht (kommt natuerlich immer auf das spiel an). die vorteile ueberwiegen imho stark.
mimi - Mo 30.06.03 17:54
es liegt an seinen grafikkarten treiber, bei mir läuft das programm problem los:)
Aya - Mo 30.06.03 18:01
Hi,
also zu der sache mit dem TimerIntervall.. das wird dein Problem in keinster weise lösen.. ;)
Denn auch wenn du den Intervall auf 0 stellst kommt dein Rechner einfach nicht mit Rendern hinterher = es fängt an zu ruckeln.
Ich würde dir ebenfalls dazu raten die 2te Methode von Mortus zu benutzen (Also die Bewegung der Objekte abhängig von der FPS zu machen, dazu kannst du auch gern nochmal in mein tutorial hier im Forum oder bei mir auf der Seite (
http://www.Koshigaya.de) schauen).
Au'revoir,
Aya~
PS: @Mimi.. du möchtest deine eMail Adresse nicht angeben??? Dann solltest du auch den eMail-Knopf unter deinem Post wegmachen... ;)
mimi - Mo 30.06.03 18:45
habe ich doch:)
du bis mod, dran liegt das...
Aya - Mo 30.06.03 19:24
| mimi hat folgendes geschrieben: |
| du bis mod, dran liegt das... |
oh... *grinst verlegen*
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!