Utilisation de Box2D dans les applications Delphi

De RAD Studio
Aller à : navigation, rechercher

Remonter à Box2D


Cette rubrique explique comment utiliser Box2D dans les applications Delphi.

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 :

  1. Sélectionnez Projet > Options > Compilateur Delphi.
  2. 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 des identificateurs étendus.

Mappage Delphi des classes Box2D

Les liaisons Delphi pour Box2D exposent les classes Box2D de l'une des manières suivantes :

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\20.0\bin\FlatBox2DDyn.dll
  • Windows 64 bits : C:\Program Files (x86)\Embarcadero\Studio\20.0\bin64\FlatBox2DDyn.dll
  • macOS 32 bits: C:\Program Files (x86)\Embarcadero\Studio\20.0\binosx32\libFlatBox2DDyn.dylib
  • macOS 64 bits: C:\Program Files (x86)\Embarcadero\Studio\20.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