Page 1 sur 1

Balistique encore un petit coup !

Publié : jeu. 21/févr./2008 8:02
par Thyphoon
ça fait quelques temps que j'étudie un peu tout les codes parlant de balistique sur ce forum
Et j'ai un petit souci.
je voudrais pouvoir calculer sa position non pas depuis l'écart de temps (lancement du projectile et maintenant) mais depuis l'écart de temps (dernier calcule de position et maintenant) :P
Je sais pas si je suis claire.

est ce quelqu'un a une idée ? Merci d'avance

Code : Tout sélectionner

Structure Projectile
X.f
Y.f
Force.f
Angle.f
Time.l
EndStructure

Global NewList Projectile.Projectile()

Procedure AddProjectile(X.l,Y.l,Force.l,Angle.l)
  AddElement(Projectile())
  Projectile()\X=X
  Projectile()\Y=Y
  Projectile()\Force=Force
  Projectile()\Angle=Angle
  Projectile()\Time=ElapsedMilliseconds()
EndProcedure


AddProjectile(0,300,20,-45)
DeltaTime.f=0
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenWindow(0,0,0,800,600,"A screen in a window... using gadget and sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
EndIf
Repeat
  Event.l = WindowEvent()     
   FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
    ExamineKeyboard()


 DeltaTime=(ElapsedMilliseconds()-Projectile()\Time)/100
 Projectile()\X = Projectile()\Force * (Cos(Projectile()\Angle * 0.0174533) * DeltaTime) + Projectile()\X
 Projectile()\Y = (9.81 / 2 * DeltaTime * DeltaTime) + (Projectile()\Force * Sin(Projectile()\Angle * 0.0174533) * DeltaTime) + Projectile()\Y
 StartDrawing(ScreenOutput())
 Circle(Projectile()\X,Projectile()\Y,10,#Red)
 StopDrawing()
 Delay(1)
        
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)

End  
:

Publié : jeu. 21/févr./2008 18:44
par Anonyme

Code : Tout sélectionner

;Calcul de la position courante (CurrentX & CurrentY)

DiffX = CurrentX - OldX
DiffY = CurrentY - OldY

OldX = CurrentX
OldY = CurrentY
j'vois ca comme ca :D

Publié : ven. 22/févr./2008 11:57
par Thyphoon
Cpl.Bator a écrit :

Code : Tout sélectionner

;Calcul de la position courante (CurrentX & CurrentY)

DiffX = CurrentX - OldX
DiffY = CurrentY - OldY

OldX = CurrentX
OldY = CurrentY
j'vois ca comme ca :D
merci pour la reponse. je vais essayer ça dans la journée. Désolé pour le temps de reponse mais j'étais coincé a l'hospital car mon fils a fait un malaise a l'école hier matin... Et c'est incroyable mais y a pas de wifi dans l'hospital :wink:

Publié : ven. 22/févr./2008 15:06
par Thyphoon
Heuuuuu je comprends pas tres bien ce que tu essais de m'expliquer !
part rapport au code que j'ai posté je comprends pas bien..cette histoire de distance alors que c'est un problème de temps qui me gène. Bon je veux bien que ce soit lié...mais j'ai pas du saisir le tenant de l'aboutissant

Publié : ven. 22/févr./2008 21:48
par Anonyme
faut dire que tu n'est pas clair non plus :
je voudrais pouvoir calculer sa position non pas depuis l'écart de temps mais depuis l'écart de temps
:D

Publié : sam. 23/févr./2008 6:04
par Thyphoon
Cpl.Bator a écrit :faut dire que tu n'est pas clair non plus :
je voudrais pouvoir calculer sa position non pas depuis l'écart de temps mais depuis l'écart de temps
:D
lollllllllll c'est claire que c'est pas terrible (mais ta aussi retirer mes parenthèses...)

Je vais essayer d'expliquer ça un peu mieux

actuellement dans mon programme la variable DeltaTime represente le temps depuis le lancement du projectile. Or je voudrais faire en sorte que DeltaTime sois le temps écoulé depuis la dernière fois ou on a dessiné le projectile.

est ce que c'est mieux là ? :P

Publié : sam. 23/févr./2008 12:59
par Anonyme

Code : Tout sélectionner

DifferenceDeTemps = DeltaTime - OldDeltaTime 

OldDeltaTime = DeltaTime 
Le code du haut c'est la même chose , mais nommé différemment ^^