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_b2DebugInit()

DESCRIPTION.


La procédure PROC_b2DebugInit() initialise le mode “debug draw” dans BBC BASIC afin de visualiser graphiquement le monde physique Box2D.



SYNTAXE.


PROC_b2DebugInit( monde , importer , echelle )




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.



importer indique les éléments de monde qui doivent être pris en compte, si plusieurs élément doivent être pris en compte, il doivent être séparé par l'opérateur OR : 

- B2_DRAW_SHAPE_BIT, ou 1, pour prendre en compte les formes des corps ; 

- B2_DRAW_JOINT_BIT, ou 2, pour prendre en compte les liens entre les corps ;

- B2_DRAW_AABB_BIT, ou 4, pour prendre en compte les boites englobantes de contacts entre les corps ; 

- B2_DRAW_CENTER_OF_MASS, ou 8, pour prendre en compte les centre de gravité des corps.


B2_DRAW_SHAPE_BIT marque les contours des formes (fixtures) en traits verts, la rotation et la position des corps, et l'affichage des contacts entre les corps (polygones, cercles, segments)


B2_DRAW_JOINT_BIT marque les lignes entre deux corps reliés, la position des points d’ancrage et le types de liens (joint).


B2_DRAW_AABB_BIT marque les rectangles jaune autour des corps, englobant chaque forme, alignés avec les axes vertical / horizontal (non tournés), utilisés par Box2D pour la détection rapide des contacts entre les corps (collisions).


B2_DRAW_CENTER_OF_MASS marque les points représentant le centre de gravité des corps, qui n'est pas forcément le centre géométrique du corps, par un point ou une croix rouge, sur lesquels s'exercent les force et les rotation.


Bien que cela ne soit pas recommandé, dans les autres langages, la distribution BBC BASIC for Raspberry ne fonctionne que si on remplacerla suite des éléments à prendre en compte par la somme de leur poids associé. Par exemple, si la simulation doit visualiser les formes et les liens entre les corps, on devra remplacer pour importer B2_DRAW_SHAPE_BIT OR B2_DRAW_JOINT_BIT par 3, pour (1 + 2).



echelle doit être une valeur numérique indiquant l'échelle graphique, en pixels par mètre, pour harmoniser les mondes physiques Box2d, qui travaille en mètres, et la zone graphique de BBC BASIC qui s'exprime en pixels. Les valeurs standards recommandées vont de 20 à 50. Par exemple si échelle vaut 30, cela indique à Box2d que 30 pixels correspondent à 1 mètre.



Voir le module box2dlib.bbc qui permet de créer des mondes Box2d et de gérer les corps et collisions dans ces mondes.

Voir la procédure PROC_b2DebugDraw() qui permet de visualiser les éléments sélectionnés à chaque mise à jour du monde.



La procédure PROC_b2DebugInit() est importée depuis le module box2ddbg.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 --- INITIALISATION GENERALE ---

VDU 23 , 22 , 640  ; 480 ; 8 , 16 , 16 , 0 : REM mode graphique SDL 640x480

GCOL 0 , 2


REM --- Importation des modules ---

REM --- Module de la bibliothèque BBC BASIC ---

INSTALL @lib$ + "box2dlib.bbc"

INSTALL @lib$ + "box2ddbg.bbc"


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 --- Initialisation et activation de debug draw ---

PROC_b2DebugInit( kmonde , 11 , 30 )


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 ---

PROC_b2DebugDraw( kmonde )


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