opstart og nedlukning funktioner tilføje og fjerne den lokale objekt fra CollisionManager
ugyldiggøre CollisionObject :: Startup () {PersistentFrameListener :: Startup ();} void CollisionObject :: Shutdown () {PersistentFrameListener :: Shutdown ();}PersistentFrameListener.h
Det andet store problem med kollision påvisning er at sikre objekter ikke bevæge sig gennem hinanden under rammen.
Vi vil løse dette ved at sætte en maksimal tid på hver ramme, som, under forudsætning af de kolliderende objekter er ikke for lille og bevæger sig for hurtigt, vil sikre, at to objekter. Dette gøres i PersistentFrameListener klassen, som nu også omfatter en funktion kaldet FrameEnded, der kaldes en gang pr ramme efter FrameStarted er blevet opfordret alle de aktive objekter
/* * PersistentFrameListener.h * * Forfatter:. Matthew Casperson * E-mail: [email protected] * Hjemmeside: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef PERSISTENTFRAMELISTENER_H_ # definere PERSISTENTFRAMELISTENER_H_ # omfatte "Ogre.h" # include "OgreEngineManager.h "# include" GameConstants.h "klasse PersistentFrameListener: offentlig FrameListener {public: PersistentFrameListener (): isStarted (falsk) {ENGINEMANAGER.GetRoot () -> addFrameListener (dette); } Virtuelle ~ PersistentFrameListener () {if (! ENGINEMANAGER.GetRoot () = NULL) ENGINEMANAGER.
GetRoot () -> removeFrameListener (dette); } Void Startup () {isStarted = true; } Void Shutdown () {isStarted = false; } Bool frameStarted (const FrameEvent & EVT) {if (this-> isStarted) returnerer FrameStarted (GetFixedFrameEvent (EVT)); returnere sandt; } Bool frameEnded (const FrameEvent & EVT) {if (this-> isStarted) returnerer FrameEnded (GetFixedFrameEvent (EVT)); returnere sandt; } Virtual bool FrameStarted (const FrameEvent & EVT) {return true;} virtuelle bool FrameEnded (const FrameEvent & EVT) {return true;} bool IsStarted () const {tilbage isStarted;} beskyttet: FrameEvent GetFixedFrameEvent (const FrameEvent & EVT) {FrameEvent fastsættes; fixed.
timeSinceLastFrame = evt.timeSinceLastFrame> MAX_FRAME_TIME? MAX_FRAME_TIME: evt.timeSinceLastFrame; returnere fast; } Bool isStarted,};. # Endif /* PERSISTENTFRAMELISTENER_H_ * /
CollisionManager er hvor alle objekterne er testet mod hinanden for kollisioner
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