dynamic frames per second adjustment 
	 
	
		| Author | 
		Message | 
	 
		 
		frank26080115
 
 
 
    
		 | 
		
		
			
				  Posted: Wed Dec 27, 2006 8:07 pm    Post subject: dynamic frames per second adjustment  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				this demo uses "Time.Elapsed" to calculate the real fps and compares it with the desired fps and adjusts the delay before a clearing of the screen accordingly. the number of dots drawn will be raised and lowered to generate different amount of lag. if the delay between frames is 0 or lower, it means the computer and the adjustment can no longer keep up, so i made sure that  "framesdelay" can't go below -10 (or else, it actually makes it go too fast after a recovery)
 
 
i think this will be useful for people making games like shoobyman's lord of the ring game and such
 
 
if you get rid of the useless stuff (for demo only stuff) you can add this into your program
 
 
	  | code: | 	 		  
 
% variables
 
%%% important part %%%
 
var framespersecond : int := 20 % change me, this is the desired frames per second
 
var framesdelay : int := 1000 div framespersecond
 
var timer1, timer2, timer3, fps : int := 0
 
%%% / important part %%%
 
 
var numofdots : int := 10
 
var upordown : int := 1
 
 
var xpos : int := 0
 
 
setscreen ("offscreenonly") % flicker free
 
 
% main loop
 
loop
 
    % draws some random dots
 
    for i : 1 .. numofdots
 
        Draw.Dot (Rand.Int (1, 300), Rand.Int (1, 300), Rand.Int (1, 100))
 
    end for
 
    if upordown = 1 then
 
        numofdots += 60
 
    elsif upordown = 2 then
 
        numofdots -= 60
 
    end if
 
    if numofdots > 20000 or fps < 6 then
 
        upordown := 2
 
    elsif numofdots < 70 then
 
        upordown := 1
 
    end if
 
    Draw.FillOval (xpos, 150, 20, 20, brightred)
 
    xpos += 10
 
    if xpos > 300 then
 
        xpos := 0
 
    end if
 
    %%% important part %%%
 
    % finds actual frames per second
 
    timer2 := timer1
 
    timer1 := Time.Elapsed
 
    timer3 := timer1 - timer2
 
    fps := 1000 div timer3
 
    % calculates lag and adjust rate accordingly
 
    if fps > framespersecond then
 
        framesdelay += 2
 
    elsif fps < framespersecond and framesdelay > - 10 then
 
        framesdelay -= 2
 
    end if
 
    Text.Locate (1, 1)
 
    put "number of dots: ", numofdots
 
    put "current frames per second: ", fps
 
    put "current frame delay (in ms): ", framesdelay
 
    if framesdelay < 1 then
 
        put "LAG!!!"
 
    end if
 
    if upordown = 1 then
 
        put "slower..."
 
    else
 
        put "faster..."
 
    end if
 
    delay (framesdelay) % delay
 
    View.Update % displays all graphics
 
    cls % clears the screen
 
    %%% / important part %%%
 
end loop
 
  | 	 
  | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
		 
		Sponsor Sponsor 
		 
  
		 | 
		
 | 
	 
	 
		  | 
	 
				 
		zylum
 
  
 
    
		 | 
		
		
			
				  Posted: Thu Dec 28, 2006 1:25 am    Post subject: (No subject)  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| you can do this simply by using Time.DelaySinceLast | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		frank26080115
 
 
 
    
		 | 
		
		
			
				  Posted: Thu Dec 28, 2006 2:49 am    Post subject: (No subject)  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				i believe you are living under the impression that my school has money, sure it can afford useless $3000 pan and tilt cameras to see who started a fire, but... this is what i had to work with lol (actually we have the new one but its not available for download)
 
 
 
 
(i still press f10 a lot)
 
 
damn it i can't even use math.distance so most of the codes you guys post won't work on my computer
 
 
so use Time.DelaySinceLast if you can | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		BenLi
 
  
 
    
		 | 
		
		
			
				  Posted: Thu Dec 28, 2006 11:21 am    Post subject: (No subject)  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
					  | code: | 	 		  
 
fcn Distance (x, y, x2, y2 : int) : real
 
    result sqrt ((x2 - x ** 2 +  (y2 - y) ** 2))
 
end Distance
 
  | 	  
 
 
 
... Merry Christmas | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		shoobyman
 
  
 
    
		 | 
		
		
			
				  Posted: Fri Dec 29, 2006 2:42 pm    Post subject: (No subject)  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				that is a cool idea.
 
 
but...
 
 
our school version does have Time.DelaySinceLast.  if your home one doesn't have it, i think the school version updated theirs so you can get it again.  All i know is my home version has it and so does the schools.
 
 
cool program though. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		ericfourfour
 
 
 
    
		 | 
		
		
			
				  Posted: Fri Dec 29, 2006 4:20 pm    Post subject: (No subject)  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| How about frame rate independent gameplay. The code is in c++ but the tutorial is pretty much universal to all languages. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		 | 
	 
 
	
	
	 
	
	 |