Lancer une balle

Résolu
ptifranfran Messages postés 6 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 6 mars 2007 - 10 avril 2005 à 19:46
gengiskhan1985 Messages postés 11 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 1 mai 2007 - 14 avril 2005 à 09:14
Je suis en train de réaliser un petit jeu où un joueur doit lancer une
balle. Il doit entrer l'angle de tir et la vitess. J'aimerai que cette
balle ddécrive une parabole en fonction de l'angle et de la vitesse
donnée. J'ai penser un a timer mais je ne sais pas quoi ecrire dedans...



Aidez moi svp, merci d'avance

5 réponses

gengiskhan1985 Messages postés 11 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 1 mai 2007
14 avril 2005 à 09:14
Sh1.Left et
Sh1.Top sont des integer mais P.X et P.Y des reels.
Dans l'aide delphi : (c'est ce qu'il y a de plus simple pour
savoir ce que fait une fonction)
function Trunc(X:Extended):Int64;
Description
Dans le code Delphi,la fonction Trunc tronque une valeur de type réel en valeur de type entier.X est une expression de type réel.Trunc renvoie une valeur Int64 qui correspond àla valeur arrondie de X (vers zéro).

Le -34 dans 'Form1.Height-TRUNC(P.Y)-Sh1.Height-34' ainsi que le -3 dans 'Form1.Width-Sh1.Width-3' sont sans doute du aux bords (la marge bleue) du form. A vrai dire j'ai jamais vraiment sus de quoi ca vient.
Mais bref, sans ca il sort du form donc tu le met.

N'oublie pas de mettre réponce accéptée !
3
gengiskhan1985 Messages postés 11 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 1 mai 2007
10 avril 2005 à 21:40
T’as deux choix (au moins) soit tu définis deux vecteurs (en gras dans la suite) : V (vitesse) et P (position) et a chaque appel tu timer tu effectue V := V + g*dt puis P : = P + V*dt.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


‘dt’ est le temps écoulé g l’accélération de la pesanteur.


Type Vecteur =Record


X,Y :Real ;


End;


const g:Vecteur= (X:0;Y:-9,8);





initialisation de V : V.X :=V_init*Cos(angle) ; V.Y :=V_init*Sin(angle) ;





Soit t'utilise la version intégrée de la formule:
Pour g =(0,-g) :
P.X := V.X*t ;


P.Y := V.Y*t-g*t*t/2;
Soit de manière plus générale :

P : =P0
+V0
*t+g*(t^2)/2; {V0 et P0
valeurs initiales (cf initialisation) t le temp total depuis lancement.}
0
ptifranfran Messages postés 6 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 6 mars 2007
11 avril 2005 à 14:27
Merci d'avoir repondu si rapidement, j'ai essayer la méthode que tu m'a
donnée mais je dois mal m'y prendre et cela ne marche pas. Pourrais tu
détailler un peu plus ce qu'il faut écrire en delphi pour réaliser mon
projet. La balle que je dois lancé s'appelle sh1 (c'est un shape) est
ce que cela peut poser un problème ?



Merci d'avance
0
gengiskhan1985 Messages postés 11 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 1 mai 2007
11 avril 2005 à 15:25
Type Vecteur= Record<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


X,Y :Real ;


End ;


const g:Vecteur =(X:0;Y:-9.8);


dt:Real= 0.1; // ecart de temp entre deux iterations





var


V,P:Vecteur;


t:Real;





procedure TForm1.Timer1Timer(Sender: TObject);


begin


P.X: =V.X*t+g.X*t*t/2; // affecte P


P.Y:= V.Y*t+g.Y*t*t/2;


t:=t+dt; // change temp


if (P.X>Form1.Width-Sh1.Width-3) or (P.Y<0) then


Begin // test sortie du form (sinon t'est pas près de revoir ton shape)


Timer1.Enabled: =False;


End;


Sh1.Left:= TRUNC(P.X);


// coordonnees a partir du bas gauche (la balle tombe en bas et pas en haut)


Sh1.Top:=Form1.Height-TRUNC(P.Y)-Sh1.Height-34;


end ;





procedure TForm1.Button1Click(Sender: TObject);


begin // lancé


V.X : =V_init*Cos(angle) ;


V.Y := V_init*Sin(angle) ;
Timer1.Enabled:=True;


t:=0;


end ;



Au début :
Timer1.Interval: =10; et Timer1.Enabled:=False;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ptifranfran Messages postés 6 Date d'inscription dimanche 12 novembre 2000 Statut Membre Dernière intervention 6 mars 2007
13 avril 2005 à 23:27
Après quelques petites modifications j'ai enfn reussi a lanncer la balle !!! Merci a gengiskhan1985 pour son aide precieuse.

J'ai une dernière questions pour toi qu'est ce que "TRUNC" a quoi ca sert ???
et qu'est ce que représente -34 dans : "Sh1.Top:=Form1.Height-TRUNC(P.Y)-Sh1.Height-34;"<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />

encore merci pour ton aide
0
Rejoignez-nous