*   >> Lezen Onderwijs artikelen >> science >> programming

Het maken van een 3D-spel met Ogre - Collision Detection

anager.h

 /* * CollisionManager.h * * Auteur: Matthew Casperson * E-mail: [email protected] * Website: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # definiëren COLLISIONMANAGER_H_ # include "PersistentFrameListener. h "#include" CollisionObject.

h "#include" lijst "#define COLLISIONMANAGER CollisionManager :: aanleg () typedef std :: lijst CollisionObjectList; klasse CollisionManager: public PersistentFrameListener {public: ~ CollisionManager (); statische CollisionManager & aanleg () {statische CollisionManager bijvoorbeeld; Zo keren; } Leegte Startup (); leegte Shutdown (); ongeldig AddCollisionObject (CollisionObject * object); ongeldig RemoveCollisionObject (CollisionObject * object); bool FrameEnded (const FrameEvent & EVT); beschermd: CollisionManager (); leegte AddNewObjects (); leegte RemoveDeletedObjects (); CollisionObjectList collisionObjectList; CollisionObjectList newObjects; CollisionObjectList deletedObjects;} # endif

CollisionManager.

cpp

 #include "CollisionManager.h"CollisionManager::CollisionManager(){}CollisionManager::~CollisionManager(){}void CollisionManager :: Startup () {PersistentFrameListener :: Startup ();} leegte CollisionManager :: Shutdown () {newObjects.clear (); deletedObjects.clear (); collisionObjectList.

clear (); PersistentFrameListener :: Shutdown ();}

Een van de redenen voor het creëren van de klasse PersistentFrameListener was om te werken rond een probleem in Ogre, waar FrameListeners nog zou kunnen hebben hun functie gebeurtenis riep zelfs nadat ze werden verwijderd uit de collectie in stand gehouden door de OgreRoot object de removeFrameListener functie. De CollisionManager laat zien waarom dit het geval is.

In het functioneren FrameEnded de CollisionManager lussen door alle CollisionObjects controleren op botsingen.

Wanneer een botsing wordt gevonden wordt de Collision functie op de botsende CollisionObjects genoemd. Zoals eerder opgemerkt, kan een van de uitkomsten van een botsing die een van de botsende objecten verwijderd door de afsluitfunctie belt. Zonder een kleine tijdelijke oplossing, zal dit Shutdown functie de CollisionObject te verwijderen uit de collectie onderhouden door de CollisionManager - precies dezelfde die we een lus over aan de botsing in de eerste plaats op te sporen.

Dit is een probleem, want als je een verzameling wijzigen (door bijvoorbeeld het verwijderen van een item uit is), terwijl een lus overheen de t

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Lezen Onderwijs artikelen,https://onderwijs.nmjjxx.com All rights reserved.