Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Game Timer


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 Xeno   Members   -  Reputation: 122

Posted 08 March 2000 - 09:17 AM

Im Working on a 2D "DeathMatch" Game (My Teachers From School is the characters ) and i want to insert a timer to my game that when the game run on slow computer the game will speed himself up and when its run on fast computer the game will slow himself plz help me , where to begin and how to do it. Thanks a lot roy

Sponsor:

#2 Cygon   Crossbones+   -  Reputation: 1141

Posted 08 March 2000 - 11:52 AM

Perhaps this is a programming issue, but anyway

You can calculate the time the computer needed to draw a frame and scale the movement of objects by that value, ex.

If the computer took 2 seconds to draw a frame, your player is moved 2 units forward,
if it took only 1/2 second, your player is moved 0.5 units.

You can use GetTickCount() which returns the number of milliseconds (1/1000th seconds) passed since the computer was turned on. Most games use a timer running at 100 up to 200 Hz (ticks per second). Here''s how to do it:

---------------------------
long LastTickCount, Ticks;

// my main loop
LastTickCount = GetTickCount();
while(game_runs) {
  Ticks = (GetTickCount() - LastTickCount) / 10;
  LastTickCount += Ticks * 10;
  if(Ticks > 100) { // Limit lag to 1 second
    Ticks = 100;
    // If we were Quake1 display a little turle
  }
  
  while(Ticks) {
    // Movement code here
  }
  
  RenderFrame();
}
---------------------------

There''s one line you may find strange:
LastTickCount += Ticks * 10;
Why not just set it GetTickCount() ? Well, this is a simple way to correct rounding errors, the time rounded away is automatically kept for the next frame. Without this is would run a littlebit faster on fast machines

There''s also another way of doing it, calculate a delta value (just GetTickCount() - LastTickCount) and multiply any movements by this (nearer at the example explained above).
This requires less execution time, but will cause problems on some things (ex. collision detection).

A last word on GetTickCount(), this is not the best function to use, because it can go slower and then get jumpy to balance it out. Search in the VC help for HighPerformanceCounter, that''s what games should use

-Markus-




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS