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

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

llisionType (collisionType ) {COLLISIONMANAGER.AddCollisionObject (dette);} CollisionObject :: ~ CollisionObject () {COLLISIONMANAGER.RemoveCollisionObject (dette);}.

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

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