⇨ MENU ⇨ BIBLIOTHEQUE ⇨ box2dlib.bbc
PROC_b2DebugDraw()
⇨ MENU ⇨ BIBLIOTHEQUE ⇨ box2dlib.bbc
PROC_b2DebugDraw()
DESCRIPTION.
La procédure PROC_b2DebugDraw() affiche une représentation symbolique des éléments sélectionnés pour l'analyse.
SYNTAXE.
PROC_b2DebugDraw( monde )
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.
B2_DRAW_SHAPE_BIT, ou 1, 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, ou 2, marque les lignes entre deux corps reliés, la position des points d’ancrage et le types de liens (joint).
B2_DRAW_AABB_BIT, ou 4, 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, ou 8, 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.
La procédure PROC_b2DebugDraw() doit être appelée juste après la mise à jour de monde par l'appelle de la procédure PROC_b2WorldStep().
Note : la procédure PROC_b2DebugInit() doit avoir été appelé avoir celui de la procédure PROC_b2DebugDraw().
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_b2DebugInit() qui permet de sélectionner les éléments a visualiser à chaque mise à jour du monde.
La procédure PROC_b2DebugDraw() 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
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.