Jump to content
  • Advertisement
Sign in to follow this  
kaisellgren

FPS/Time Limiting - how to achieve and separating drawing & logic

This topic is 3469 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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. 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. :)

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
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/

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!