Search this site
Embedded Files
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
  • More
    • Accueil
    • BBC BASIC
    • BBC OS
    • BBC MODULES
    • RUBRIQUES
    • LIENS

⇨ 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

vos remarques, vos commentaires et de vos suggestions.

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.

Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse