www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/01/28/00:48:23

From: jromano AT teton DOT Mines DOT EDU (Jean-Luc Romano)
Newsgroups: comp.os.msdos.djgpp
Subject: Frames per second question
Date: 28 Jan 1998 02:17:43 GMT
Organization: Colorado School of Mines
Lines: 74
Message-ID: <6am4g7$dtk$1@herald.Mines.EDU>
References: <6ae2u5$ls2$1 AT herald DOT Mines DOT EDU> <6aeqlq$qjq$2 AT news DOT ox DOT ac DOT uk>
NNTP-Posting-Host: teton.mines.edu
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp


Hey!  Thanks for answering!  If you don't mind, I have two more
questions:

1.)  I want to prevent the behavior that makes a program run too
     fast on a fast computer (but I still want the program to run
     slow on a slow computer).

     I figure I can do that by timing the event loops so they 
     run a set number of times a second.  My first question is:  
     What is the suggested minimum number of frames to blit to 
     the screen per second?  (I use the allegro library.)

     Is ten times per second too slow?

---------

2.)  As for my second question, George Foot explained how to 
create a fixed timer using the allegro library:

George Foot (mert0407 AT sable DOT ox DOT ac DOT uk) wrote:
: The simplest way to use Allegro's routines to do this is like so:

: volatile int global_ticks = 0;
: void my_timer_function () {
: 	global_ticks++;
: }
: END_OF_FUNCTION (my_timer_function);

: Then at initialisation:

: 	LOCK_VARIABLE (global_ticks);
: 	LOCK_FUNCTION (my_timer_function);
: 	install_timer();
: 	install_int_ex (my_timer_function, BPS_TO_TIMER (1000));

   The above code increments global_ticks once every millisecond
(1000 times a second).  My second question is:  if I wanted to 
display, say, a maximum of 10 frames to my screen every second, 
would implementing the following code be suggested?

  BITMAP *buffer;

  while(1)  /* Event loop */
  {
     /* code executed every event loop */
     .
     .
     .
     while (global_ticks < 100){}  /* if one tenth of a second
                                      hasn't elapsed yet, do
				      nothing until one tenth of
				      a second has elapsed. */
     global_ticks = 0;  /* reset the global_ticks for next time
                           through the event loop */
  /* blit the buffer to the screen like so: */
     blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
  }


   Basically, this code calculates everything up to the buffer.
If the computer happens to be too fast (resulting in global_ticks
less than 100), the program waits out the tenth of a second
allocated to that loop of the event loop, then moves on.

   Is this an efficient way to prevent the speed-up of my game on
faster computers, or is there a better way?

   Thanks in advance.

   Jean-Luc Romano


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019