essaie ça.
mieux vaut ne pas attacher un timer à une fenêtre : ça crée des décalages selon l'"occupation" de celle-ci.
Et crée deux procédures distinctes pour les deux timers.
De plus, pour changement immédiat et pas d'interruption d'affichage, il faut mettre les displaysprites dans la boucle de la fenêtre et dans la procédure
Code : Tout sélectionner
;+-------------------------------------------------------------------
;PURE ARNAQUE
;par Torp
;Pure Basic 3.92
;+-------------------------------------------------------------------
;OpenConsole()
;+-------------------------------------------------------------------
;-Declaration des constantes
;+-------------------------------------------------------------------
#Plateau=1
#Cpt1=32:#CptX=7:#CptY=384
#Sprite=2:#TxtCpt=0
;+-------------------------------------------------------------------
;-Declarations des Variables et affectations des valeurs
;+-------------------------------------------------------------------
Declare Timer()
Declare Sablier()
Global AffCpt.b,Ro.w,Ve.w,Bl.w,ValCpt.b
AffCpt=#False
PosJoueur2=0:Ro=255:Ve=255:Bl=0
Installation$="d:\téléchargements\timer\"
LoadFont(#TxtCpt,"arial",16):UseFont(#TxtCpt)
;+-------------------------------------------------------------------
;-Initialisation de ecran du jeu
;+-------------------------------------------------------------------
If InitMouse()=0 Or InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0
MessageRequester("Erreur","Impossible d'initialiser DirectX",0)
End
EndIf
If OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar,"Le jarnac")=0
MessageRequester("Erreur","Impossible d'afficher l'écran principal",0)
End
EndIf
If OpenWindowedScreen(WindowID(),0,0,800,600,0,0,0)=0
MessageRequester("Erreur","Impossible d'afficher l'écran principal",0)
End
EndIf
;+-------------------------------------------------------------------
;-Structures et listes chainees et tableaux
;+-------------------------------------------------------------------
;+-------------------------------------------------------------------
;-Chargement des Sprites
;+-------------------------------------------------------------------
UsePNGImageDecoder()
LoadSprite(#Cpt1,Installation$+"Cpt1.png")
LoadSprite(#Plateau,Installation$+"Plateau.png")
;+-------------------------------------------------------------------
;-Premier Tirage de Lettres
;+-------------------------------------------------------------------
Timer()
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+-------------------------------------------------------------------
;-Programme principal
;+-------------------------------------------------------------------
Repeat
DisplaySprite(#Plateau,0,0)
DisplaySprite(#Cpt1,#CptX,#CptY)
CreateSprite(#Sprite, 40, 19)
StartDrawing(SpriteOutput(#Sprite))
DrawingFont(UseFont(#TxtCpt))
DrawingMode(1)
FrontColor(Ro,Ve,Bl)
DrawText(Str(ValCpt))
StopDrawing()
DisplayTransparentSprite(#Sprite,#CptX+25+PosJoueur2,#CptY+12)
;++++++Affichage des compteurs
;+++++++++++++++++++++++++++++++++++++++
Select WaitWindowEvent()
Case #WM_KEYDOWN
key.b = EventwParam()
If key = 27:End:EndIf
EndSelect
FlipBuffers(0)
ForEver
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+-------------------------------------------------------------------
;-Mise en route des Timers
;+-------------------------------------------------------------------
Procedure Timer()
Timer1=SetTimer_(0,0, 1000, @Sablier())
;Timer2=SetTimer_(WindowID(0), 2, 21000, @Sablier())
EndProcedure
;+-------------------------------------------------------------------
;-Tache a effectuer par le declenchement des Timers
;+-------------------------------------------------------------------
Procedure Sablier()
ValCpt+1
DisplaySprite(#Cpt1,#CptX,#CptY)
CreateSprite(#Sprite, 40, 19)
StartDrawing(SpriteOutput(#Sprite))
DrawingFont(UseFont(#TxtCpt))
DrawingMode(1)
FrontColor(Ro,Ve,Bl)
DrawText(Str(ValCpt))
StopDrawing()
DisplayTransparentSprite(#Sprite,#CptX+25+PosJoueur2,#CptY+12)
EndProcedure