Code archives/Algorithms/Frame Limiting
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Morduun wrote a Newbies' Frame Limiting tutorial for B2D/B3D here This is some Bmax code to go with it. I couldn't bring myself to use a GOTO for the setspeedfactor. I didn't need to create a list but thought it might be handy to have facility for more than 1 timer. I added a pause feature which works but seems a bit 'clunky'. Any comments, improvements etc feel free. (thanks Morduun) | |||||
SuperStrict
Type TFramerate
Global list:tlist=CreateList()
Field targetfps:Float = 60.0
Field speedfactor:Float
Field fps:Float
Field tickspersecond:Int = 1000
Field currentticks:Int
Field framedelay:Int = MilliSecs()
Function FrameLimitInit:tframerate()
Local temp:tframerate = New tframerate
ListAddLast list , temp
Return temp
End Function
Method settargetfps(target:Float)
targetfps = target
End Method
Method setspeedfactor()
currentticks = MilliSecs()
speedfactor = (currentticks - framedelay) / (tickspersecond / targetfps)
If speedfactor <= 0 speedfactor = 0.0000000001
fps = targetfps / speedfactor
framedelay = currentticks
End Method
Method drawfps(x:Int , y:Int)
DrawText Int(fps) , x , y
DrawText Int(targetfps) , x , y + 20
DrawText speedfactor,x,y+40
End Method
Method printfps()
Print "FPS : " + FPS + " TargetFPS : " + targetfps
End Method
Method pause()
Global p:Int
Global oldtargetfps:Float
If targetfps <> 0 oldtargetfps = targetfps
If p=0
settargetfps(0.0)
p=1
Else
settargetfps(oldtargetfps)
p=0
EndIf
End Method
End Type
Global main_FR:TFramerate = tframerate.FrameLimitInit()
main_FR.settargetfps(30.0)
Graphics 640,480
Local posx:Float=0.0, posy:Float=GraphicsHeight()/2, speed:Float=4.0
While Not KeyHit(KEY_ESCAPE)
main_FR.setspeedfactor()
Cls
If MouseHit(1) main_fr.settargetfps(main_fr.targetfps + 10.0)
If MouseHit(2) main_fr.settargetfps(main_fr.targetfps - 10.0)
If KeyHit(KEY_SPACE) main_fr.pause
DrawOval posx , posy , 10 , 10
main_FR.drawfps(0,0)
posx = (posx + (speed * main_fr.speedfactor) ) Mod 640.0
Flip 0
Wend |
Comments
None.
Code Archives Forum