Public Declare Function GetTickCount Lib "kernel32" () As Long
Public mlngTimer As Long
Public mlngElapsed As Long
Public mlngFrameTimer As Long
Public mintFPSCounter As Integer
Public mintFPS As Integer
Public Sub Timer()
mlngElapsed = GetTickCount() - mlngTimer
mlngTimer = GetTickCount()
If GetTickCount() - mlngFrameTimer >= 1000 Then
mlngFrameTimer = GetTickCount()
mintFPS = mintFPSCounter
mintFPSCounter = 0
Else
mintFPSCounter = mintFPSCounter + 1
End If
End Sub
I don't know how to put that in code tags... anyway, I use that to count my FPS and then I draw mintFPS to the screen and it says 500. My problem is, how do I limit the times the screen is drawn. I don't like to draw the screen 500 times, it unnecessarily puts strain on the GPU and heats it... I want to sync it with the monitor Hz which is usually 60 on LCDs... so the FPS should be 60, right? I will of course put my game logic outisde the limiter, so, CPU will continue to do work even though the screen has been already drawn 60 times within the second. :)
FPS/Time Limiting - how to achieve and separating drawing & logic
Hi!
I am new to these forums, so, if there is something I did wrong or I seem stupid, bear with me. I am a web security expert and I have lately been very interested in game programming, so, I decided to make a game of my own. :)
Anyway, currently my game does not have any limitations in speed, which is obviously bad. I would like to hear answers from experts about this area. My game will be an online game (it will be aimed for that), so, I think time based modelling is the way to go? I mean, instances move x pixels per second, not per frame. In multiplayer, each player will move as fast, but on a higher performance computers the animation is smoother.
I am working with VB.NET and DirectX. VB.NET, because it's simple language and I have been using it a lot for making programs and after all, I am making a simple home made program, thus, I don't need the power of C or C++...
At the moment I am recording my FPS and showing it on the screen. I am actually making a real time strategy game. And when I have 100 moving units on the screen at once, the FPS is around 500.
If you're using D3D, OpenGL or some other 3D library for rendering then simply turning on vsync should bring the frame rate down to something more reasonable.
Your other option is to wait for an appropriate time to elapse between frames. To do that you'll want to use a higher resolution timer. QueryPerformanceCounter() is probably the best option for that.
Your other option is to wait for an appropriate time to elapse between frames. To do that you'll want to use a higher resolution timer. QueryPerformanceCounter() is probably the best option for that.
Vsync would be the logical solution, but I've also found this Gaffer on Games article to be enlightening: http://gafferongames.com/game-physics/fix-your-timestep/
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement