⇨ MENU ⇨ BIBLIOTHEQUE ⇨ box2dlib.bbc
PROC_b2WorldStep()
⇨ MENU ⇨ BIBLIOTHEQUE ⇨ box2dlib.bbc
PROC_b2WorldStep()
DESCRIPTION.
La procédure PROC_b2WorldStep() met à jour les positions des corps dans un monde physiques Box2d.
SYNTAXE.
PROC_b2WorldStep( monde , duree , vitesse , position )
REMARQUES.
monde doit être l'identifiant de la variable ayant reçu la valeur retournée par l'appel de la fonction FN_b2CreateWorld() et qui indique donc le monde physique dans lequel on crée le corps.
duree doit être une valeur numérique, indiquant le temps, en secondes, qui aura passé depuis le dernier appel de la procédure PROC_b2WorldStep(). Par exemple 0.016, ou 1/60, corresponds à 60 misses à jour par seconde. Il est fortement conseillé de garder des intervalles de durée constantes entre deux mises à jour.
vitesse doit être une valeur numérique, donnant la précision (velocity iterations) des vitesses, des rebonds et des forces. Les valeurs typiques sont :
- 4, rendu rapide mais imprécis ;
- 6, bon compromis ;
- 8, recommandé ;
- 10 et plus, plus précis mais rendu plus lent.
position doit être une valeur numérique, donnant la précision des positions et des contacts. Les valeurs typiques sont :
- 2, rapide mais imprécis ;
- 3, rendu correct, bon compromis ;
- 4, recommandé, stable mais rendu plus lent.
L'appel de la procédure PROC_b2WorldStep() fait avancer le temps de duree seconde(s) dans un monde physique Box2d. Sans appel de cette procédure, rien ne progresse dans monde. Il faut donc l’appeler à chaque fois que l'on souhaite visualiser et analyser les déplacements et interactions entre les corps dans monde. En général, on synchronisera l'intervalle entre deux appels, c'est-à-dire duree, avec la fréquence d'images.
A chaque nouvel appel de la fonction PROC_b2WorldStep(), Box2D va appliquer la gravité, calculer les nouvelles vitesses, gèrer les collisions, déplacer les corps, corriger les contacts et avancer de duree secondes dans le temps.
Note : la procédure PROC_b2WorldStep() n'affiche rien, ne crée pas d’objet, ne définit pas la gravité et ne mémorise pas des paramètres; Elle ne fait que calculer le mouvement.
Rappel : la procédure PROC_b2Init devra toujours être appelée avant tout autre fonction ou procédure de box2dlib.bbc.
La procédure PROC_b2WorldStep() est importée depuis le module box2dlib.bbc.
RUBRIQUES.
Les dessins et les graphismes pour plus de détails sur la création de dessins et de graphismes.
La gestion des couleurs pour plus de détails sur la gestion des couleurs logiques et physiques.
EXEMPLE.
REM --- Importation des modules ---
REM --- Module de la bibliothèque BBC BASIC ---
INSTALL @lib$ + "box2dlib.bbc"
REM --- INITIALISATION GENERALE ---
VDU 23 , 22 , 640 ; 480 ; 8 , 16 , 16 , 0 : REM mode graphique SDL 640x480
GCOL 0 , 2
REM --- Initialisation et création du monde ---
PROC_b2Init
kmonde = FN_b2CreateWorld( 0 , 9.81 ) : REM - créer un monde
kcorps = FN_b2DynamicBody( kmonde , 5 , 5 , 0 , 0 , 0 , 0 , 0 , 0 ) : REM - créer un corps dans le monde
kforme = FN_b2BoxFixture( kcorps , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 ) : REM - associer une forme rectangulaire au corps
PROC_b2SetBody( kcorps , 5 , 1 , 0 ) : REM - place le corps dans le monde
REM --- facteurs de conversion des dimensions dans le monde ( pixels par unité physique) ---
kechelle = 30 : REM - pixels par unité Box2D
ktaille = 30 : REM - taille du carré (corps) en pixels
khauteur = 960 : REM - hauteur réelle de la fenêtre en pixels
kcentre = ( ktaille / 2 ) / kechelle : REM - rapport de l'ordonnee du centre du corps
REM --- Boucle d'animation du corps dans le monde ---
REPEAT
REM --- Initialisation des donnees de la mise à jour ---
PROC_b2WorldStep( kmonde , 0.017 , 8 , 3 ) : REM - met à jour le monde de 1/60=0,017 de seconde
PROC_b2GetBody( kcorps , kabscisse , kordonnee , kangle ) : REM - retourné la position et l'inclinaison du corps
PROC_b2GetVelocity( kcorps , khorizontal , kvertical , krotation ): REM - retourné les vitesses du corps
ktour = ktour + 1
CLS
REM --- Le corps est arrivé en bas (remonté) ---
IF kordonnee - kcentre <= 0 THEN
kordonnee = kcentre
kvertical = ABS( kvertical )
PROC_b2SetBody( kcorps , kabscisse, kordonnee, kangle )
PROC_b2SetVelocity( kcorps , khorizontal , kvertical , krotation )
ENDIF
REM --- le corps est arrivé en haut (redescent) ---
IF kordonnee + kcentre >= ( khauteur / kechelle ) THEN
kordonnee = ( khauteur / kechelle ) - kcentre
kvertical = -ABS( kvertical )
PROC_b2SetBody( kcorps , kabscisse, kordonnee, kangle )
PROC_b2SetVelocity( kcorps , khorizontal , kvertical , krotation )
ENDIF
REM --- Nouvelles coordonnes coin inférieur gauche de carre ( avec conversion des pixel en unites Box2d ) ---
kabscisse = ( kabscisse * kechelle ) - ( ktaille / 2 )
kordonnee = ( kordonnee * kechelle ) - ( ktaille / 2 )
REM --- Redessine le carré représentant le corps ---
RECTANGLE FILL kabscisse , kordonnee , ktaille , ktaille
REM --- Affiche les donnees pour controle ---
PRINT ktour , INT( kabscisse ) , INT( kordonnee ) , INT( khorizontal ) , INT( kvertical )
REM --- Temporisation (legere) entre deux mise à jour ---
WAIT( 1 )
UNTIL FALSE
REM --- Fin du programme ---
END
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
avec un exemple de résolution à télécharger pour vous inspirer.