Le deltatime est le temps que met votre boucle principale à être parcourue par votre programme , ce deltatime diffère suivant un PC puissant , ou moins puissant.
cela permet d'avoir un mouvement constant , et ce, sur n'importe quel pc, vous n'aurez donc pas de soucis qu'un de vos vieux code , tourne un jour beaucoup trop vite en utilisant cette méthode , le code est parlant :
si vous avez des questions , le topic est fait pour cela
Code : Tout sélectionner
;
; ------------------------------------------------------------
; 21/07/2015 G-Rom
;
; Deplacement en fonction du deltatime
;
; le deltatime est le temps entre chaque boucle principale
; d'une application / ou d'un jeu
; il permet d'avoir un déplacement constant
; sur n'importe quel PC
; ------------------------------------------------------------
;
InitSprite() : InitKeyboard()
wnd = OpenWindow(#PB_Any,0,0,1024,768,"DeltaTime - special pour Falsam ^^")
OpenWindowedScreen(WindowID(wnd),0,0,1024,768)
deltatime.f = 0
run.b = #True
moveUp.b = #False
moveDown.b = #False
moveRight.b = #False
moveLeft.b = #False
posx = 512
posy = 384
vitesse = 100 ; 100 pixels par secondes
While run
;
; on demare le "chrono"
;
StartTime.i = ElapsedMilliseconds()
;
; window event
;
Repeat
event = WindowEvent()
If event = #PB_Event_CloseWindow
run = #False
EndIf
Until event = 0
;
; real time input
;
ExamineKeyboard()
If(KeyboardPushed(#PB_Key_Up))
moveUp = #True
Else
moveUp = #False
EndIf
If(KeyboardPushed(#PB_Key_Down))
moveDown = #True
Else
moveDown = #False
EndIf
If(KeyboardPushed(#PB_Key_Right))
moveRight = #True
Else
moveRight = #False
EndIf
If(KeyboardPushed(#PB_Key_Left))
moveLeft = #True
Else
moveLeft = #False
EndIf
;
; update du jeu
;
If moveUp : posy - vitesse * deltatime : EndIf
If moveDown : posy + vitesse * deltatime : EndIf
If moveRight : posx + vitesse * deltatime : EndIf
If moveLeft : posx - vitesse * deltatime : EndIf
;
; rendu
;
ClearScreen(RGB(64,128,255))
StartDrawing(ScreenOutput())
Circle(posx,posy,10,RGB(255,128,64))
StopDrawing()
FlipBuffers()
;
; on calcul le temps qu'a mis la boucle pour faire un tour & on divise par mille
;
deltatime = (ElapsedMilliseconds() - StartTime) / 1000
Wend
Bon, un tocard du discord de Falsam dénommé "Nemrod" à pensé à tord avec son air pédant que le DeltaTime était utilisé pour le réseau et pour synchronisé des choses... , du moins il pensais que je le pensais, bref.
Le DeltaTime ne sert uniquement à avoir des déplacements constant entre 2 pc AYANT des configurations différentes, en aucun cas, je ne parle de PC connecté, si vous avez besoins de conseils techniques , demandez à Nemrod, il a décompilé mortal kombat 11 et à vu que mk11 n'avait pas d'implémentation de deltatime ( pas de bol , le jeu utilise unreal engine et utilise aussi le deltatime ) et mis en place un serveur minecraft... bref, encore un cador en prog...