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

FN_b2NextContact()

DESCRIPTION.


La fonction FN_b2NextContact() retourne la liste des collisions actuellement présents dans un monde physique Box2d.




SYNTAXE.


kcollision = FN_b2NextContact( precedent )




REMARQUES.


precedent doit être l'identifiant de la variable ayant reçu la valeur retournée par l'appel de la fonction FN_b2ContactListWorld() () ou de l'appel précédent de la fonction FN_b2NextContact().


La fonction FN_b2NextContact() retourne une valeur numérique identifiant un pointeur, où se trouve la collision suivante dans monde. Toutes les collisions présentes actuellement sont stockées, les unes à la suite des autres, dans une liste qui devra être parcourue avec d’autres fonctions du module box2dlib, telle que FN_b2ContactGetNext(), FN_b2ContactGetFixtureA(), FN_b2ContactGetFixtureB().


Il est important de mémoriser la valeur retournée par la fonction FN_b2NextContact() dans une variable, car elle devra être fournie aux appels suivants de la fonction FN_b2NextContact() pour accéder à la collision suivante dans la liste des collisions actuellement actives dans un monde physique Box2d.



Note : si aucune collision n'est actuellement active dans monde, la fonction FN_b2NextContact() retourne 0.



Voir la fonction FN_b2IsTouching() qui sert à savoir si deux corps sont réellement en train de se toucher à cet l’instant. Car parcourir la liste des collisions sans vérifier si les corps se touchent physiquement peut donner de faux positifs.



ATTENTION : la liste des collisions, n’est pas un tableau de données BBC BASIC, mais une structure C interne à Box2D. Donc le pointeur retourné par la fonction FN_b2ContactListWorld() n’est pas un objet BBC BASIC, mais un pointeur C encapsulé, stocké sous forme d’un entier par la bibliothèque.



L'appel de la fonction  FN_b2NextContact() permet d'accéder à l'élément suivant dans de la liste de toutes les collisions actuellement actives dans un monde physique Boxd. Il faut ensuite filtrer cette liste, élément par élément, c'est-à-dire répondre à des questions comme : Est-ce que cet objet précis est en collision ? Est-ce que deux types d’objets se touchent ? Quelles collisions faut-il ignorer (capteurs, décor, etc.) ? Pour cela, il ne faut filtrer pas les collisions directement, mais via les formes ou les corps impliqués dans chaque collision.



Voir la fonction FN_b2ContactListWorld() pour plus de détails sur l'analyse d'une collision entre deux corps dans un monde physique Box2d.



Rappel : la procédure PROC_b2Init devra toujours être appelée avant tout autre fonction ou procédure de box2dlib.bbc.



La procédure FN_b2NextContact() 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 ---


REM --- Initialisation et création du monde ---

PROC_b2Init

kmonde = FN_b2CreateWorld( 0 , -9.81 )


REM --- Creation d'es corps et de leur forme ---

kpetit = FN_b2DynamicBody( kmonde , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 ) 

kgrand = FN_b2DynamicBody( kmonde , 6 , 6 , 0 , 0 , 0 , 0 , 0 , 0 ) 

kforme_petit = FN_b2BoxFixture( kpetit , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 )

kforme_grand = FN_b2BoxFixture( kgrand , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 )


REM --- Localisation de la première collision ---

kcollision = FN_b2ContactListWorld( monde )

kindex = 1 


REM --- A faire tant qu'il y a des collisions actives non traitées ---

WHILE kcollision <> 0


REM --- Traitement de la collision ---

kforme_A = FN_b2ContactGetFixtureA( kcollision ) : REM - identification et mémorisation la forme A

kforme_B = FN_b2ContactGetFixtureB( kcollision ) : REM - identification et mémorisation la forme B

kcorps_A = FN_b2FixtureGetBody( kforme_A ) : REM - identification et mémorisation du corps associé a la forme A

kcorps_B = FN_b2FixtureGetBody( kforme_B ) : REM - identification et mémorisation du corps associé a la forme B

PRINT "Collision " ; kindex ; " (Id : " ; kcollision ; " ) contact entre " ; kcorps_A ; " et " ; kcorps_B ; ". "


REM --- Collision suivante ---

kcollision = FN_b2ContactGetNext( kcollision )

kindex += 1 


ENDWHILE


REM --- Fermeture de box2dlib ---

PROC_b2Exit


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