/* * 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
Kom godt i gang med Activeperl
- Sende HTML Form med ActivePerl
- Påstande og Fejl Tal i C ++
- Abstract Factory Design Pattern
- Pakker og N-Ary Association
- Mysql Opret tabel SQL-sætning af Chrys
- Udfør Smertefri SEO med Best Firefox Extensions
- Grundlæggende om C ++ Identifier Scope
- En kort oversigt over SQL Injection
- Programmør Ved Heart
- Edit Control i Windows