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 av grunnene for å skape den PersistentFrameListener klassen var å omgå et problem i Ogre hvor FrameListeners kan fortsatt ha sin event funksjon kalt selv etter at de ble fjernet fra samlingen vedlikeholdes av OgreRoot objektet med removeFrameListener funksjon. Den CollisionManager viser hvorfor dette er tilfellet.
I FrameEnded fungere CollisionManager looper gjennom alle CollisionObjects sjekke for kollisjoner. Hvis en kollisjon er funnet, er Kollisjon funksjonen på de kolliderende CollisionObjects kalt.
Som tidligere nevnt, kan en av resultatene av en kollisjon være at en av de kolliderende gjenstandene blir fjernet ved å kalle dens avslutning funksjon. Uten en liten løsningen blir Shutdown funksjon fjerne CollisionObject fra samlingen vedlikeholdes av CollisionManager - den samme som vi ble looping over til oppdage kollisjonen i første omgang. Dette er et problem fordi hvis du endrer en samling (ved å si å fjerne et element fra det) mens looping over det søknaden ville krasje.
For å unngå dette problemet helt nye og fjernet objekter blir lagret i midlertidige samlinger newObjects og deletedObjects (via AddCollisionObject og RemoveCollisionObject funksjoner)
Komme i gang med Activeperl
- Referanse i C ++
- Hvordan lage Nøkkel Generatorer
- Opprette en live Twitter statusoppdatering med YQL og JavaScript
- Unntak håndtering i C ++
- Vektor Modifikatorer i C ++
- Mysql Tilgang Gull Overview
- Spesifisere Unntak funksjoner i C ++
- Hvordan implementere diskusjonen i Java?
- Komme i gang med Javascript
- Hvordan lage Windows XP Look Like Windows 7