Acceleration - Deceleration

Programmation avancée de jeux en PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

j'ai ajouté un frottement du type k * v qui correspond au frottement entre roue et sol (attention, toujours mettre une vitesse positive donc une valeur absolue sur la vitesse s'impose)
Pour revenir à ce que j'ai dit auparavant, k * v², c'est l'air

je trouvais qu'il manquait une composante dans la déccélération

ça rend mieux avec les 2 composantes

Code : Tout sélectionner

Declare Erreur(Message$)
;{- Constantes
#ScreenWidth = 800
#ScreenHeight = 600
#ScreenDepth = 32
;- Initialisation
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  Erreur("Impossible d'initialiser DirectX 7 Ou plus")
ElseIf OpenScreen( #ScreenWidth, #ScreenHeight, #ScreenDepth, "" ) = 0
  Erreur("Impossible d'ouvrir l'écran ")
EndIf
SetFrameRate(70)
;- Structures
Structure Joueur
  CoefFrottement.f
  Acceleration.f
  Vitesse.f
  PositionX.f
  Sens.b
EndStructure
Global Joueur.Joueur

;- Sprites
;/ Joueur
CreateSprite(1, 32, 32)
If StartDrawing(SpriteOutput(1))
    Box(0, 0, 32, 32, RGB(100, 150, 140))
  StopDrawing()
EndIf
;- Procedures
Procedure Erreur(Message$)
  MessageRequester( "Erreur", Message$, 0 )
  End
EndProcedure

Procedure Touches()
  If ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Left)
      Joueur\Acceleration = 1
      Joueur\Sens = -1
    ElseIf KeyboardPushed(#PB_Key_Right)
      Joueur\Acceleration = 1
      Joueur\Sens = 1
    Else
      Joueur\Acceleration = 0
    EndIf
  EndIf
EndProcedure

Procedure CalculDeplacement()
  ; f=k*v² ( k=0.09)
  Joueur\CoefFrottement = 0.09 * Joueur\Vitesse * Joueur\Vitesse + 0.07 * Abs(Joueur\Vitesse)
  ; v=(a-f)+v
  Joueur\Vitesse + (Joueur\Acceleration - Joueur\CoefFrottement) * Joueur\Sens
  ; e=e+v
  Joueur\PositionX + Joueur\Vitesse
EndProcedure

;- Boucle principale
Temps = ElapsedMilliseconds()
Repeat
  ClearScreen(0, 0, 0)
  ;/ Test le clavier
  Touches()
  ;/ Affiche le sprite
  CalculDeplacement()
  DisplaySprite(1, Joueur\PositionX, 300)
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
eRz0r
Messages : 30
Inscription : ven. 14/janv./2005 17:42

Message par eRz0r »

Le Second code du premier post de comtois ma suffit ;)

eRz
Répondre