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 ?
- 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 ?
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.
\\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
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
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()