*   >> Lecture Éducation Articles >> science >> la programmation

Faire un jeu en 3D avec Ogre - Collision Detection

endif

CollisionObject.cpp

 #include "CollisionObject.h" #include "CollisionManager.h" CollisionObject :: CollisionObject (int collisionType): collisionType (collisionType ) {COLLISIONMANAGER.AddCollisionObject (this);} CollisionObject :: ~ CollisionObject () {COLLISIONMANAGER.RemoveCollisionObject (this);}.

Les fonctions démarrage et d'arrêt ajouter et de supprimer l'objet local de la CollisionManager

 annuler CollisionObject :: démarrage () {PersistentFrameListener :: démarrage ();} CollisionObject :: shutdown () {PersistentFrameListener :: shutdown ();} vide 

PersistentFrameListener.h

L'autre gros problème avec la collision détection fait que les objets ne se déplacent pas à travers l'autre pendant la trame.

Nous allons résoudre ce problème en fixant un maximum de temps sur chaque cadre, qui, en supposant que les objets en collision ne sont pas trop petites et trop vite, fera en sorte que les deux objets. Cela se fait dans la classe PersistentFrameListener, qui inclut désormais aussi une fonction appelée FrameEnded qui est appelé une fois par trame après frameStarted a été appelée sur tous les objets actifs

 /* * * * PersistentFrameListener.h Auteur:. Matthew Casperson * Email: [email protected] * Site Web: https://www.brighthub.com/hubfolio/matthew-casperson.

aspx * /# ifndef PERSISTENTFRAMELISTENER_H_ # définir PERSISTENTFRAMELISTENER_H_ # comprennent #include "Ogre.h" "OgreEngineManager.h "#include" GameConstants.h «classe PersistentFrameListener: FrameListener {public: PersistentFrameListener (): isStarted (false) {ENGINEMANAGER.GetRoot () -> addFrameListener (this); } ~ Virtuelle PersistentFrameListener () {if (! ENGINEMANAGER.GetRoot () = NULL) ENGINEMANAGER.

GetRoot () -> removeFrameListener (this); } Vide démarrage () {isStarted = true; } Void shutdown () {isStarted = false; } Bool frameStarted (const FrameEvent & EVT) {if (this-> isStarted) retourner frameStarted (GetFixedFrameEvent (EVT)); return true; } Bool frameEnded (const FrameEvent & EVT) {if (this-> isStarted) retourner FrameEnded (GetFixedFrameEvent (EVT)); return true; } Virtuelle bool frameStarted (const FrameEvent & EVT) {return true;} FrameEnded bool virtuel (const FrameEvent & EVT) {return true;} bool isStarted () const {return isStarted;} protégée: FrameEvent GetFixedFrameEvent (const FrameEvent & EVT) {FrameEvent fixe; fixed.

timeSinceLastFrame = evt.timeSinceLastFrame> MAX_FRAME_TIME? MAX_FRAME_TIME: evt.timeSinceLastFrame;

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Lecture Éducation Articles,https://lecture.nmjjxx.com All rights reserved.