Hi,
Here is my method. Sorry, I can't comment it because my english is not very good. But for my next game, I'll allow the player to chose the normal timming, or setting himself the monitor refresh at 60hz ( for the best smooth, like console-games ).
AppTitle "Test"
;/////////////////////////////////////////////////////////////////////////
Const ResolutionX%=640;X
Const ResolutionY%=480;Y
Const FPS#=60;images par secondes du jeu
;/////////////////////////////////////////////////////////////////////////
Graphics ResolutionX,ResolutionY,16
;*****************************************************
;*****************************************************
;Routine pour gerer le nombre d'image par secondes **
;*****************************************************
Type Frame_Rate ;*****************
Field TargetFPS# ;*****************
Field FPS# ;*****************
Field TicksPerSecond# ;*****************
Field CurrentTicks# ;*****************
Field FrameDelay# ;*****************
Field SpeedFactor# ;*****************
Field AccumTicks# ;*****************
End Type ;*****************
Global Target_FPS#=FPS# ;*****************
Global FL.Frame_Rate=New Frame_rate ;*****************
Frame_Limit_Init(Target_FPS) ;*****************
;*****************************************************
;*****************************************************
;image
Image=CreateImage(64,64)
;variable
ImageX#=0;X
ImageY#=32;Y
Acceleration#=0;acceleration
AccelerationBis%=0;acceleration bis
;/////////////////////////////////////////////////////////////////////////
;*****************
;* boucle du jeu *
;*****************
SetBuffer BackBuffer()
While Not KeyDown(1);tant que "echappe" n'a pas ete presse
;******************************************************
;Routine pour gerer le nombre d'image par secondes ***
;******************************************************
Gosub Set_Speed_Factor; ***
;******************************************************
ClsColor 255,0,255
Cls;efface le tampon
;FL\SpeedFactor=1;a utiliser si rafraichissement moniteur=60hz
;acceleration
If AccelerationBis=1 ImageX=(ImageX-(4*FL\SpeedFactor));gauche
If AccelerationBis=2 ImageX=(ImageX+(4*FL\SpeedFactor));droite
;dessine l'image
DrawBlock Image,ImageX,ImageY
;textes
Text 00,100,"ImageX "+ImageX
Text 00,110,"ImageY "+ImageY
Text 00,120,"AccelerationBis "+AccelerationBis
;mise a jour
AccelerationBis=0
;/////////////////////////////////////////////////////////////////////////
Flip;basculement des tampons
;/////////////////////////////////////////////////////////////////////////
;controleur
If KeyDown(203) AccelerationBis=1;gauche
If KeyDown(205) AccelerationBis=2;droite
;/////////////////////////////////////////////////////////////////////////
Wend
End
;**************************************************************************************
;**************************************************************************************
;Routine pour gerer le nombre d'image par secondes ***********************************
;**************************************************************************************
.Set_Speed_Factor ;** ;**
FL\CurrentTicks=MilliSecs() ;**
FL\SpeedFactor=(FL\CurrentTicks-FL\FrameDelay)/(FL\TicksPerSecond/FL\TargetFPS) ;**
If FL\SpeedFactor<0 FL\SpeedFactor=0;ne doit pas etre negatif ;**
If FL\SpeedFactor>1 FL\SpeedFactor=1;ne permet pas au jeu de saccader ;**
FL\FPS=FL\TargetFPS/FL\SpeedFactor ;**
FL\FrameDelay=FL\CurrentTicks ;**
Return ;**
Function Frame_Limit_Init(target_FPS) ;**
FL\TargetFPS=target_FPS ;**
FL\TicksPerSecond=1000 ;**
FL\FrameDelay=MilliSecs() ;**
End Function ;**
;**************************************************************************************
;**************************************************************************************
Here is my method. Sorry, I can't comment it because my english is not very good. But for my next game, I'll allow the player to chose the normal timming, or setting himself the monitor refresh at 60hz ( for the best smooth, like console-games ).
AppTitle "Test"
;/////////////////////////////////////////////////////////////////////////
Const ResolutionX%=640;X
Const ResolutionY%=480;Y
Const FPS#=60;images par secondes du jeu
;/////////////////////////////////////////////////////////////////////////
Graphics ResolutionX,ResolutionY,16
;*****************************************************
;*****************************************************
;Routine pour gerer le nombre d'image par secondes **
;*****************************************************
Type Frame_Rate ;*****************
Field TargetFPS# ;*****************
Field FPS# ;*****************
Field TicksPerSecond# ;*****************
Field CurrentTicks# ;*****************
Field FrameDelay# ;*****************
Field SpeedFactor# ;*****************
Field AccumTicks# ;*****************
End Type ;*****************
Global Target_FPS#=FPS# ;*****************
Global FL.Frame_Rate=New Frame_rate ;*****************
Frame_Limit_Init(Target_FPS) ;*****************
;*****************************************************
;*****************************************************
;image
Image=CreateImage(64,64)
;variable
ImageX#=0;X
ImageY#=32;Y
Acceleration#=0;acceleration
AccelerationBis%=0;acceleration bis
;/////////////////////////////////////////////////////////////////////////
;*****************
;* boucle du jeu *
;*****************
SetBuffer BackBuffer()
While Not KeyDown(1);tant que "echappe" n'a pas ete presse
;******************************************************
;Routine pour gerer le nombre d'image par secondes ***
;******************************************************
Gosub Set_Speed_Factor; ***
;******************************************************
ClsColor 255,0,255
Cls;efface le tampon
;FL\SpeedFactor=1;a utiliser si rafraichissement moniteur=60hz
;acceleration
If AccelerationBis=1 ImageX=(ImageX-(4*FL\SpeedFactor));gauche
If AccelerationBis=2 ImageX=(ImageX+(4*FL\SpeedFactor));droite
;dessine l'image
DrawBlock Image,ImageX,ImageY
;textes
Text 00,100,"ImageX "+ImageX
Text 00,110,"ImageY "+ImageY
Text 00,120,"AccelerationBis "+AccelerationBis
;mise a jour
AccelerationBis=0
;/////////////////////////////////////////////////////////////////////////
Flip;basculement des tampons
;/////////////////////////////////////////////////////////////////////////
;controleur
If KeyDown(203) AccelerationBis=1;gauche
If KeyDown(205) AccelerationBis=2;droite
;/////////////////////////////////////////////////////////////////////////
Wend
End
;**************************************************************************************
;**************************************************************************************
;Routine pour gerer le nombre d'image par secondes ***********************************
;**************************************************************************************
.Set_Speed_Factor ;** ;**
FL\CurrentTicks=MilliSecs() ;**
FL\SpeedFactor=(FL\CurrentTicks-FL\FrameDelay)/(FL\TicksPerSecond/FL\TargetFPS) ;**
If FL\SpeedFactor<0 FL\SpeedFactor=0;ne doit pas etre negatif ;**
If FL\SpeedFactor>1 FL\SpeedFactor=1;ne permet pas au jeu de saccader ;**
FL\FPS=FL\TargetFPS/FL\SpeedFactor ;**
FL\FrameDelay=FL\CurrentTicks ;**
Return ;**
Function Frame_Limit_Init(target_FPS) ;**
FL\TargetFPS=target_FPS ;**
FL\TicksPerSecond=1000 ;**
FL\FrameDelay=MilliSecs() ;**
End Function ;**
;**************************************************************************************
;**************************************************************************************