Utilisation de Box2D dans les applications Delphi
Remonter à Box2D
Cette rubrique explique comment utiliser Box2D dans les applications Delphi.
Sommaire
Configuration de votre application pour utiliser Box2D
RAD Studio ne fournit pas de fichiers .dcu
préconstruits pour les unités Box2D Delphi. Pour pouvoir construire un projet Delphi contenant des unités Box2D dans la clause uses
, vous devez configurer le chemin de recherche de votre projet de manière que RAD Studio trouve les unités Box2D.
Pour configurer le chemin de recherche de votre projet Delphi de manière que RAD Studio trouve les unités Box2D :
- Sélectionnez Projet > Options > Compilateur Delphi.
- Ajoutez
${BDS)\source\FlatBox2D
au champ Chemin de recherche.
Vous pouvez maintenant ajouter des références à ces unités dans votre code de manière à pouvoir utiliser Box2D.
Utilisation de Box2D
Les liaisons Delphi pour Box2D sont basées sur l'API C++ (EN). Il existe toutefois des différences notables.
- Remarque: Pour utiliser les liaisons Delphi pour Box2D, vous devez être familier des pointeurs et identificateurs étendus.
Mappage Delphi des classes Box2D
Les liaisons Delphi pour Box2D exposent les classes Box2D de l'une des manières suivantes :
- En tant qu'enregistrement avec le nom d'origine de la classe Box2D. Voir Utilisation des enregistrements Box2D.
- En tant qu'enregistrement avec le nom d'origine de la classe Box2D suivi du suffixe
Wrapper
. Par exemple, le wrapper deb2World
seraitb2WorldWrapper
. Voir Utilisation des enregistrements wrapper Box2D.
Dans les deux cas, contrairement aux enregistrements Delphi habituels, il ne suffit pas de déclarer ces enregistrements Box2D pour les créer. Vous devez appeler leur procédure Create
pour vous assurer que leurs membres ont les valeurs par défaut appropriées. Si vous déclarez un enregistrement et que vous n'appelez pas Create
, les valeurs par défaut de ses membres peuvent ne pas correspondre à celles définies par Box2D.
groundBodyDef := b2BodyDef.Create;
Utilisation des enregistrements Box2D
Les liaisons Delphi pour Box2D fournissent la plupart des classes Box2D sous forme d'enregistrements. Les seules exceptions sont les classes exposées sous forme d'enregistrements wrapper et les classes écouteur.
Utilisation des enregistrements wrapper Box2D
Les liaisons Delphi pour Box2D fournissent les enregistrements wrapper suivants :
b2BlockAllocatorWrapper
b2BodyWrapper
b2BroadPhaseWrapper
b2ChainAndCircleContactWrapper
b2ChainAndPolygonContactWrapper
b2ChainShapeWrapper
b2CircleContactWrapper
b2CircleShapeWrapper
b2ContactWrapper
b2ContactManagerWrapper
b2ContactSolverWrapper
b2DistanceJointWrapper
b2DrawWrapper
b2DynamicTreeWrapper
b2EdgeAndCircleContactWrapper
b2EdgeAndPolygonContactWrapper
b2EdgeShapeWrapper
b2FrictionJointWrapper
b2GearJointWrapper
b2IslandWrapper
b2JointWrapper
b2MotorJointWrapper
b2MouseJointWrapper
b2PolygonAndCircleContactWrapper
b2PolygonContactWrapper
b2PolygonShapeWrapper
b2PrismaticJointWrapper
b2PulleyJointWrapper
b2RevoluteJointWrapper
b2RopeWrapper
b2RopeJointWrapper
b2ShapeWrapper
b2StackAllocatorWrapper
b2WeldJointWrapper
b2WheelJointWrapper
b2WorldWrapper
Libération des enregistrements et des wrappers d'enregistrements Box2D
Les seuls enregistrements ou wrappers d'enregistrements Box2D que vous devez libérer sont des instances de b2WorldWrapper
. Le destructeur de b2WorldWrapper
libère la mémoire allouée par les corps, les fixtures ou les jointures dans l'objet b2WorldWrapper
.
Les exceptions à cette règle sont :
- les ShapeWrappers,
- d'autres wrappers que vous construisez explicitement et qui sont détruits dans C++.
world.Destroy;
Les écouteurs Box2D sont également une exception à cette règle.
Définition des écouteurs Box2D
Box2D définit certaines classes écouteur. Lorsque vous utilisez C++, vous pouvez créer une sous-classe d'écouteur, créer une instance de votre sous-classe et recenser votre objet écouteur dans un objet Box2D, par exemple un monde (b2World
).
Pour créer un objet écouteur Box2D d'un certain type dans Delphi, vous devez définir une classe personnalisée qui implémente l'interface de la classe écouteur Box2D cible. L'interface d'une classe écouteur Box2D est nommée comme la classe écouteur Box2D mais est préfixée d'un I
majuscule. Par exemple, Ib2ContactListener
est l'interface de la classe écouteur Box2D b2ContactListener
.
TMyContactListener = class (TInterfacedObject, Ib2ContactListener)
public
procedure BeginContact(contact: NativeUInt); cdecl;
procedure EndContact(contact: NativeUInt); cdecl;
procedure PostSolve(contact: NativeUInt; impulse: Pb2ContactImpulse); cdecl;
procedure PreSolve(contact: NativeUInt; oldManifold: Pb2Manifold); cdecl;
end;
Une fois que vous disposez d'une classe qui implémente l'interface écouteur cible, vous devez créer une instance de cette classe.
myContactListener := TMyContactListener.Create;
Les accesseurs en écriture d'un écouteur ne peuvent pas gérer votre objet écouteur directement. A la place, vous devez obtenir un délégué (de type NativeUInt
) pour votre objet écouteur et transmettre ce délégué à l'accesseur en écriture de l'écouteur. Utilisez Create_<listener class>_delegate
pour créer un délégué de votre objet écouteur.
myContactListenerHandle := Create_b2ContactListener_delegate(myContactListener);
world.SetContactListener(myContactListenerHandle);
Après avoir détruit le monde Box2D, vous pouvez détruire votre objet écouteur en transmettant son handle à Destroy_<listener class>_delegate
.
world.Destroy;
Destroy_b2ContactListener_delegate(myContactListenerHandle);
Déploiement de votre application
Sur les plates-formes de bureau, vous devez distribuer la bibliothèque dynamique Box2D de RAD Studio en même temps que votre application.
Le fichier de la bibliothèque dynamique Box2D de RAD Studio est disponible dans :
- Windows 32 bits :
C:\Program Files (x86)\Embarcadero\Studio\23.0\bin\FlatBox2DDyn.dll
- Windows 64 bits :
C:\Program Files (x86)\Embarcadero\Studio\23.0\bin64\FlatBox2DDyn.dll
- macOS 64 bits:
C:\Program Files (x86)\Embarcadero\Studio\23.0\binosx64\libFlatBox2DDyn.dylib
Ajoutez ce fichier bibliothèque au Gestionnaire de déploiement pour chacune des plates-formes cible prises en charge par votre application. Ainsi, lorsque vous déploierez votre application pour une plate-forme de bureau, le fichier de bibliothèque dynamique Box2D de RAD Studio sera inclus dans les fichiers déployés de votre application.
Voir aussi
Exemples
- Box2D Hello World (Delphi)
- Exemple Box2D Hello
- Exemple Box2D TestBed
- Exemple FMX SimplePhysics