*   >> Læs Uddannelse artikler >> science >> programming

Realiseringen af ​​et 3D-spil med Ogre - Collision Detection

CollisionManager.h

 /* * CollisionManager.h * * Forfatter: Matthew Casperson * E-mail: [email protected] * Hjemmeside: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # definerer COLLISIONMANAGER_H_ # omfatte "PersistentFrameListener. h "# include" CollisionObject.

h "# include" liste "#define COLLISIONMANAGER CollisionManager :: Instans () typedef std :: liste CollisionObjectList, klasse CollisionManager: offentlig PersistentFrameListener {public: ~ CollisionManager (); statisk CollisionManager & Instans () {statisk CollisionManager instans; returnere eksempel; } Void Startup (); void Shutdown (); ugyldiggøre AddCollisionObject (CollisionObject * objekt); ugyldiggøre RemoveCollisionObject (CollisionObject * objekt); bool FrameEnded (const FrameEvent & EVT), beskyttet: CollisionManager (); void AddNewObjects (); void RemoveDeletedObjects (); CollisionObjectList collisionObjectList; CollisionObjectList newObjects; CollisionObjectList deletedObjects;}; # endif

CollisionManager.

cpp

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

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

En af grundene til at skabe den PersistentFrameListener klassen var at arbejde omkring et problem i Ogre hvor FrameListeners stadig kunne få deres arrangement funktion kaldet selv efter at de blev fjernet fra samlingen vedligeholdes af OgreRoot objekt med removeFrameListener funktion. Den CollisionManager viser, hvorfor det er tilfældet.

I Funktion FrameEnded den CollisionManager sløjfer gennem alle CollisionObjects kontrol for kollisioner.

Hvis en kollision er fundet, er Kollision funktionen på de kolliderende CollisionObjects kaldes. Som bemærket tidligere, kan et af resultaterne af en kollision, at en af ​​de kolliderende objekter fjernes ved at kalde dets Nedlukning funktion. Uden en lille løsning, vil dette Shutdown funktion fjerne CollisionObject fra samlingen vedligeholdes af CollisionManager - den samme, som vi var looping over til at registrere kollisionen i første omgang. Dette er et problem, fordi hvis du ændrer en samling (ved f.eks at fjerne et element fra det), mens looping over det ansøgningen ville gå ned.


For at undgå dette problem alle

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Læs Uddannelse artikler,https://uddannelse.nmjjxx.com All rights reserved.