Aktuelle Zeit: 24.11.2017 05:42

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 02.07.2017 20:41 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Tja scheint wohl ein BUG zu sein ?!

Es sei denn es wissen hier "die Auskenner" besser.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 03.07.2017 10:56 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Im englischen Forum habe ich folgendes gefunden:
http://www.purebasic.fr/english/viewtopic.php?f=13&t=45869&hilit=setframerate (leider in 'Coding Questions', darum wahrscheinlich ignoriert)
http://www.purebasic.fr/english/viewtopic.php?f=4&t=65902&hilit=setframerate
http://www.purebasic.fr/english/viewtopic.php?f=24&t=50222&hilit=setframerate

eventuell mal anderes Subsystem testen.

TroaX hat geschrieben:
... 0,4 Pixel. Das geht natürlich nicht (man brauch eine Ganzzahl) ...
Ich würde heutzutage genau aus dem Grund für z.B. Positionen einfach Fliesskommawerte verwenden.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 06.07.2017 21:35 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
In Zeiten von 240Hz Monitoren muss man solche "Ideen" lesen ...
ich hab kurzeitig das Gefühl gehabt der Thread ist aus dem Jahre 1980. :mrgreen:

... aber billige 2D-Spiele dürfen natürlich auch nen Framelock auf 30 FPS haben ...
Doch wers richtig macht, programmiert Zeitbasiert und macht sich über solche Blödsinn keine sorgen. Auch bei 2D-Spielen. :wink:

Zum Thema des Threads:
Das Verhalten ist arg seltsam. Wenn es "nur" bei exakt der Monitor-Refresh-Rate passiert stinkt das gewaltig nach Treiber oder/ und Hardware. Tatsächlich schreibt ja zxtunes.com, dass bei ihm nur mit der Quadro auftritt ... evt. mal andere Grafikkarte ausprobieren? SetRefreshRate() wird vermutlich nur eine DirectX oder Windows-Funktion direkt aufrufen, ohne viel drum rum.

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 17.08.2017 09:27 
Offline
Benutzeravatar

Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte
Über 1 Jahr alt der Bug und immer noch nicht gefixt, was macht Fred?

_________________
Windows 10 Pro, 64-Bit / Whose Hoff is it anyway?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 17.08.2017 09:28 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Er hat andere Prioritäten. :mrgreen:

_________________
BildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 29.08.2017 19:28 
Offline

Registriert: 29.08.2004 13:18
Hmm...

Workaround-Möglichkeit:
Überprüf die HZ von Desktop. Wenn die gleich der gewünschten framerate ist, dann aktivier einfach VSync und ende. Warum Ärgern :)

Ich schätze mal, dass das Spiel trotz No Sync die Ausgabe auf den Monitor irgendwie synchronisiert

Code:
#WIDTH = 800
#HEIGHT = 600
#VSYNC = 0

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,#WIDTH,#HEIGHT,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

If #VSYNC
   OpenWindowedScreen(WindowID(0),0,0,#WIDTH,#HEIGHT,0,0,0)
Else
   OpenWindowedScreen(WindowID(0),0,0,#WIDTH,#HEIGHT,0,0,0,#PB_Screen_NoSynchronization)   
   SetFrameRate(50) ; 59 geht, 61 geht, 60 geht nicht
EndIf

LoadSprite(0,#PB_Compiler_Home + "\Examples\Sources\Data\Geebee2.bmp")
TransparentSpriteColor(0,RGB(255,0,255))
CreateSprite(1,#WIDTH,#HEIGHT)
StartDrawing(SpriteOutput(1))
For i=0 To #HEIGHT
   c = i * 100 / #HEIGHT
   Box(0,i,#WIDTH,1,RGB(0+c,20+c,50+c))
Next
StopDrawing()

start=ElapsedMilliseconds()
Repeat
   ti=ElapsedMilliseconds()
   FlipBuffers():pics+1
   ti=ElapsedMilliseconds()-ti
   EventID = WindowEvent()
   
   
   ClearScreen(0)
   
   Angle.f + 0.05   
   SX = #WIDTH / 2 - SpriteWidth(0) / 2
   SY = #HEIGHT / 2 - SpriteHeight(0) / 2
   
   DisplaySprite(1,0,i):i+1:If i>100:i=0:EndIf
   
   StartDrawing(ScreenOutput())
   DrawText(0,ti*5,""+ti)
   
   DrawText(100,0,""+StrF(pics/((ElapsedMilliseconds()-start)/1000.1)))
   StopDrawing()
   
   DisplayTransparentSprite(0,SX + Cos(Angle) * 50,SY + Sin(Angle) * 50)
   
Until EventID = #PB_Event_CloseWindow


links springt ja die Anzeige, wie lange das Bild nun gebraucht hat, da sieht man immer 1/60ms-Sprünge drin. Es erfolgt damit immer eine Synchronisation und ich schätze mal, das Fred seine Formel bei FPS=Hz mist baut.


@PMV
definiere billige Spiele. Wenn ein Spiel mit Animationen in 30FPS arbeitet (weil mehr zu erstellen zu aufwendig sind), dann macht es kein Sinn 2000 Bilder die Sekunde zu zeichnen. Das verbraucht nur unnötige CPU-Zeit und erzeugt wärme.
Sinnvoller ist es hier schlicht runterzuregeln. Abhängig von der Monitor-Frequenz.

Die Billigen Spiele mit einen "Bone"-Modell profitieren natürlich von Framefrei. Aber das ist halt kein klassisches 2D.

@TroaX
Auch in klassischen 2D kann man die Koordinaten mit Doubles und Floats berechnen und dann immer bei der Ausgabe runden. Kein Thema.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 29.08.2017 20:00 
Offline

Registriert: 29.08.2004 13:18
Eine manuelle Synchronisation zu programmieren ist aber auch kein Problem.
Code:
#WIDTH = 800
#HEIGHT = 600
#VSYNC = 0

InitSprite() : InitKeyboard()

OpenWindow(0,0,0,#WIDTH,#HEIGHT,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

If #VSYNC
  OpenWindowedScreen(WindowID(0),0,0,#WIDTH,#HEIGHT,0,0,0)
Else
  OpenWindowedScreen(WindowID(0),0,0,#WIDTH,#HEIGHT,0,0,0,#PB_Screen_NoSynchronization)   
  ;SetFrameRate(10) ; 59 geht, 61 geht, 60 geht nicht
EndIf


wantedFPS=1000/60

LoadSprite(0,#PB_Compiler_Home + "\Examples\Sources\Data\Geebee2.bmp")
TransparentSpriteColor(0,RGB(255,0,255))
CreateSprite(1,#WIDTH,#HEIGHT)
StartDrawing(SpriteOutput(1))
For i=0 To #HEIGHT
  c = i * 100 / #HEIGHT
  Box(0,i,#WIDTH,1,RGB(0+c,20+c,50+c))
Next
StopDrawing()

start.q=ElapsedMilliseconds()
waiting.q=start
Repeat
  ti=ElapsedMilliseconds()
  FlipBuffers():pics+1
  eventid=WindowEvent()
 
 
  waiting+ wantedFPS
  While ElapsedMilliseconds()<waiting
    ;Delay(0) ; Delay sorgt für unruhige Wartezeiten und ist ungenau!
  Wend
  If ElapsedMilliseconds()-waiting>2000
    waiting=ElapsedMilliseconds()
    Debug "hängt zu lange hinten nach"
  EndIf
 
  ti=ElapsedMilliseconds()-ti
 
 
   
  Angle.f + 0.05   
  SX = #WIDTH / 2 - SpriteWidth(0) / 2
  SY = #HEIGHT / 2 - SpriteHeight(0) / 2
 
   
  ClearScreen(0)

  DisplaySprite(1,0,0)
 
  StartDrawing(ScreenOutput())
  DrawText(0,ti*5,""+ti)
 
  DrawText(100,0,""+StrF(pics/((ElapsedMilliseconds()-start)/1000.1),2)+" - "+waiting+" "+ElapsedMilliseconds())
  StopDrawing()
 
  DisplayTransparentSprite(0,SX + Cos(Angle) * 50,SY + Sin(Angle) * 50)
 
Until EventID = #PB_Event_CloseWindow

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 08.10.2017 15:12 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
GPI hat geschrieben:
@PMV
definiere billige Spiele. Wenn ein Spiel mit Animationen in 30FPS arbeitet (weil mehr zu erstellen zu aufwendig sind), dann macht es kein Sinn 2000 Bilder die Sekunde zu zeichnen. Das verbraucht nur unnötige CPU-Zeit und erzeugt wärme.
Sinnvoller ist es hier schlicht runterzuregeln. Abhängig von der Monitor-Frequenz.

Die Billigen Spiele mit einen "Bone"-Modell profitieren natürlich von Framefrei. Aber das ist halt kein klassisches 2D.

Sobald sich Sprites von A nach B bewegen profitiert auch ein 2D-Spiel von höheren Frameraten. 2D Animationen
sind wohl in den meisten Fällen sogar unter 30 Bilder pro Sekunde, diese also als Maß der Dinge zu nehmen ist
also nicht sehr Empfehlenswert. :lol:

Bei "billig" dachte ich vor allem an Causal-Spiele, die vor nem Jahrzehnt aufboomten und nur im Fenstermodus
in einer festen Auflösung gehen. Dürften damals so 800x600 gewesen sein. Tatsächlich bin ich mir aber
sicher, das es solche auch heute noch gibt. Da wird für die 5-10€ Kaufpreis sich aber vermutlich niemand
aus der Zielgruppe beschweren, wenn das Spiel keine 60 Hz unterstützt. :wink:

Wer sich aber Spieleentwickler nennen will, sollte ohne Probleme in der Lage sein, zeitbasierte Bewegung
um zu setzen und dies auch Anwenden ... meine Meinung :wink:

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 09.10.2017 13:21 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Fluid Byte hat geschrieben:
Wenn man mit SetFrameRate() die FPS auf 59 oder 61 setzt passt die Geschwindigkeit. Ist sie genau auf 60 erfolgt gar keine Drosselung und es wird so schnell aktualisiert wie die Hardware es hergibt.

Auf meinem Laptop funktioniert das Festsetzen der Framerate auf 60 und 61, aber auf 59 gibt es erstaunlicherweise keine Drosselung.

\\Edit:
1-58 funktionieren auch, nur 59 nicht. :roll:

_________________
BildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Screen aktualisiert viel zu schnell trotz SetFrameRate()
BeitragVerfasst: 09.10.2017 17:57 
Offline

Registriert: 29.08.2004 13:18
Schau doch mal nach, welche Hz eingestellt ist. Mein Media-PC stellt sich gerne mal auf 59Hz.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye