Article     Discussion     Modifier     Historique     Forums     Salon IRC

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.

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.