*   >> Lectura Educación Artículos >> science >> programación

Hacer un juego en 3D con Ogre - Colisión Detection

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

Las funciones de inicio y cierre agregar y quitar el objeto local de la CollisionManager

 anular CollisionObject :: inicio () {PersistentFrameListener :: inicio ();} void CollisionObject :: apagado () {PersistentFrameListener :: Apagar ();} 

PersistentFrameListener.

h

El otro gran problema con la colisión detección es asegurarse de que los objetos no se mueven a través de cada otro durante la trama. Nos ocuparemos de esto estableciendo un tiempo máximo en cada fotograma, lo que, suponiendo que los objetos que chocan no son demasiado pequeñas y moviendo demasiado rápido, se asegurará de que los dos objetos. Esto se hace en la clase PersistentFrameListener, que ahora también incluye una función llamada FrameEnded que se llama una vez por trama después frameStarted se ha pedido a todos los objetos activos

 /* * * PersistentFrameListener.h.

* Autor: Mateo Casperson * Email: [email protected] * Sitio web: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef PERSISTENTFRAMELISTENER_H_ # definir PERSISTENTFRAMELISTENER_H_ # incluyen #include "Ogre.h" "OgreEngineManager.h "#include" GameConstants.h "clase PersistentFrameListener: FrameListener pública {public: PersistentFrameListener (): isStarted (false) {ENGINEMANAGER.GetRoot () -> addFrameListener (this); } PersistentFrameListener virtuales ~ () {if (! ENGINEMANAGER.GetRoot () = NULL) ENGINEMANAGER.

GetRoot () -> removeFrameListener (this); } Void inicio () {isStarted = true; } Void apagado () {isStarted = false; } Bool frameStarted (const FrameEvent y evt) {if (this-> isStarted) volver frameStarted (GetFixedFrameEvent (evt)); return true; } Bool frameEnded (const FrameEvent y evt) {if (this-> isStarted) volver FrameEnded (GetFixedFrameEvent (evt)); return true; } Virtuales bool frameStarted (const FrameEvent y evt) {return true;} FrameEnded bool virtual (const FrameEvent y evt) {return true;} bool IsStarted () const {return isStarted;} protegida: FrameEvent GetFixedFrameEvent (const FrameEvent y evt) {FrameEvent fijo; fixed.

timeSinceLastFrame = evt.timeSinceLastFrame> MAX_FRAME_TIME? MAX_FRAME_TIME: evt.timeSinceLastFrame; rendimiento fijo; } Bool isStarted;};. # Endi

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Lectura Educación Artículos,https://lectura.nmjjxx.com All rights reserved.