Faire sauter un objet en Dark Basic
Un article de Games Creators Network.
J'ai remarqué que ce problème revient assez souvent sur le forum et que certaines personnes proposent des "solutions" vraiment très farfelues, la plupart du temps difficiles à mettre en place et/ou peu réalistes.
[modifier] La chute libre de petit frères
Prenez votre petit frère, portez-le à bous de bras et lachez-le : il tombe en chute libre. C'est le mouvement de chute le plus simple : c'est un MUA, mouvement uniformément accéléré. Cela implique que l'accélération est constante et que la vitesse varie.
L'accélération est g, c'est-à-dire -9.81 mètres par seconde au carré. La vitesse dépend du temps. A l'instant où vous lachez votre petit frère, sa vitesse est nulle. Un dizième de seconde plus tard, elle vaut 0.1 [s] * (-9.81) [m/s^2] = -0.981 [m/s].
Que se passe-t-il ? C'est simple : l'accélération s'additionne à la vitesse.
[modifier] Le lancer de petit frères
Prenez votre petit-frère et lancez-le verticalement à une vitesse de 5[m/s]. On va dire que cette vitesse est la vitisse initiale, ou v0.
Au bout d'une seconde, quelle est sa vitesse ? Tout simplement v0 - 1*g, c'est-à-dire 5[m/s]-1[s]*(-9.81)[m/s^2] = -4.81. Eh oui, au bout d'une seconde, votre petit frère est déjà en train d'approcher le plancher des vaches à grande vitesse.
[modifier] Du petit frère à l'ordi
Imaginez que vous avez un objet. Vous désirez le faire sauter, que faites-vous ? Il suffit de lui donner une vitesse positive, par exemple, 5[m/s]. Mais pour qu'il redescende, il faut continuellement diminuer sa vitesse, donc lui donner une accélération dirigée vers le bas. Pour le moment, c'est toujours très simple, mais ... coder cela peut nécessiter une certaine réflexion.
Je vais proposer ici une solution pour un objet se trouvant sur une matrice. Ce n'est pas la seule, ce n'est peut-être pas la meilleur, donc si quelqu'un veut en proposer une autre, il est toujours possible d'en ajouter par la suite.
`paramétrages divers sync on sync rate 50 set text font "arial",1 set text size 18 `création du sol make matrix 1, 10, 10, 5, 5 position matrix 1, -5,0,-5 `création du "joueur" make object box 1,1,2,1 `décalage de l'objet de manière à ce que son fond soit `aux coordonnées de l'objet ; c'est plus simple par la `suite offset limb 1, 0, 0, 1, 0 `gestion caméra move camera -5 posy as float vitessey as float g as float = -0.01 do `affichage des variables set cursor 0,0 print "Vitesse : ",vitessey print "Hauteur : ",posy `on ajoute l'accélération à la vitesse inc vitessey, g `on ajoute la vitesse à la position inc posy, vitessey `on regarde si posy est plus bas que la matrice if posy < get ground height(1, 0, 0) `si c'est le cas, on remet posy à la hauteur du sol posy = get ground height(1, 0, 0) `on remet la vitesse à zéro (la chute est stoppée) vitessey = 0 `mais attention : une fois qu'on est au sol : si on `presse espace, le joueur saute if spacekey()=1 then vitessey=0.3 endif `mise à jour de la position de l'objet position object 1, 0, posy, 0 point camera 0,posy,0 sync loop
Si vous utilisez la version classique de 3D Games Creator, vous devrez enlever les déclarations de variables et ajouter # après leur nom partout dans le code. Vous aurez peut-être aussi à changer la ligne 4.

