Seite 1 von 2

[GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 16:05
von Mijikai
Hat jemand ein Beispiel für einen GameLoop ohne V-Sync/Framelimit ? :shock:

- Wie kann man die Render-Funktion timen (FPS & Deltatime) ?
- Wie kann der Prozessor entlastet werden (Delay) ?

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 16:09
von RSBasic
2D oder 3D?

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 16:11
von Mijikai
RSBasic hat geschrieben:2D oder 3D?
2D

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 16:11
von RSBasic
Mijikai hat geschrieben:Hat jemand ein Beispiel für einen GameLoop ohne V-Sync/Framelimit ? :shock:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitMouse()
InitKeyboard()
InitSound()

If OpenScreen(1920, 1080, 32, "Screen")
  
  ;SetFrameRate(60)
  
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
    
    ExamineKeyboard()
    ExamineMouse()
    
    If KeyboardReleased(#PB_Key_Escape)
      End
    EndIf
    
  ForEver
EndIf
\\Edit:
Das war glaube ich mein schnellster Post. Nur in 11 Sekunden. :lol:

\\Edit2:
Mijikai hat geschrieben:- Wie kann man die Render-Funktion timen (FPS & Deltatime) ?
Ich glaube, es gab mal ein Beispielcode von STARGÅTE, um ohne SetFrameRate das Timing für die Animation und Spielwiedergabe zu steuern.
Mijikai hat geschrieben:- Wie kann der Prozessor entlastet werden (Delay) ?
Das brauchst du garnicht machen. Bei meinem Beispielcode gibt es 0 %-Prozessorauslastung.

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:01
von Mijikai
SetFrameRate() hilft mir leider nicht da ich keinen Zugriff auf diese Funktion habe.
Ich suche eine Allgemeingültige Lösung.

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:05
von RSBasic
Deshalb schrieb ich, es gibt einen Beispielcode von STARGÅTE. Such mal im Forum.
Ich kann später auch mal suchen.

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:07
von RSBasic
Hier wirst du fündig: http://www.purebasic.fr/german/viewtopi ... =4&t=30240
Da gibt es mehrere Lösungen. Einfach mal durchscrollen.

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:08
von mk-soft
Also 2D ohne Screen !?

Muss mal suchen

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:12
von Mijikai
RSBasic hat geschrieben:Deshalb schrieb ich, es gibt einen Beispielcode von STARGÅTE. Such mal im Forum.
Ich kann später auch mal suchen.
Hab ich gelesen :)

Wollte noch was zu meiner Antwort hinzufügen aber gegen deine Geschwindigkeit komme ich nicht an :o
Danke für die rasend schnelle Antwort/en <)
mk-soft hat geschrieben:Also 2D ohne Screen !?

Muss mal suchen
Genau :)

Ich versuch mal STARGÅTE's Code zu finden.

- Ok war wieder zu langsam :freak:

Danke ich schau mir den Link an.

Re: [GameLoop] DeltaTime & FPS ? (kein V-Sync/Framelimit)

Verfasst: 06.05.2018 17:29
von mk-soft
Es ist besser mit Frames zu arbeiten um nicht die CPU Last zu hoch zu schrauben...

ACHTUNG! Nicht hypnotisieren lassen...
v2

Code: Alles auswählen

;-

Enumeration windows
  #Main
EndEnumeration

Enumeration gadgets
  #Canvas
EndEnumeration

Procedure MyDraw()
  Static r = 10, add = 10
  Protected dx = GadgetWidth(#Canvas)
  Protected dy = GadgetHeight(#Canvas)
  Protected x = dx >> 1
  Protected y = dy >> 1
  
  If StartDrawing(CanvasOutput(#Canvas))
    Box(0, 0, dx, dy, $FFFF00)
    r + add
    If r >= 200
      add = -10
    ElseIf r <= 10
      add = 10
    EndIf
    Circle(x, y, r, $0000FF)
    StopDrawing()
  EndIf
  
EndProcedure

Procedure Main()
  Protected event
  Protected frames, time, timer
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "MyDraw", #PB_Window_SystemMenu)
    CanvasGadget(#Canvas, 0, 0, WindowWidth(#Main), WindowHeight(#Main))  
  Else
    End -1
  EndIf
  
  frames = 30
  time = 1000 / frames
  timer = 1
  AddWindowTimer(#Main, timer, time)
  BindEvent(#PB_Event_Timer, @MyDraw(), #Main, timer)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
  
EndProcedure : Main()