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

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

f /* PERSISTENTFRAMELISTENER_H_ * /

El CollisionManager es donde todos los objetos son probados uno contra el otro para las colisiones

CollisionManager.h

 /* * CollisionManager.h * * Autor: Matthew Casperson * Email: [email protected] * Sitio web: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # define COLLISIONMANAGER_H_ # incluyen "PersistentFrameListener. h "#include" CollisionObject.

h "#include" lista "#define COLLISIONMANAGER CollisionManager :: Instancia () typedef std :: Lista CollisionObjectList; clase CollisionManager: PersistentFrameListener pública {public: ~ CollisionManager (); estática y CollisionManager Instancia () {instancia CollisionManager estática; volver instancia; } Void inicio (); void apagado (); anular AddCollisionObject (CollisionObject * objeto); anular RemoveCollisionObject (CollisionObject * objeto); bool FrameEnded (const FrameEvent y evt); protegida: CollisionManager (); AddNewObjects void (); RemoveDeletedObjects void (); CollisionObjectList collisionObjectList; NewObjects CollisionObjectList; DeletedObjects CollisionObjectList;}; # endif

CollisionManager.

cpp

 #include "CollisionManager.h"CollisionManager::CollisionManager(){}CollisionManager::~CollisionManager(){}void CollisionManager :: inicio () {PersistentFrameListener :: inicio ();} void CollisionManager :: apagado () {newObjects.clear (); deletedObjects.clear (); collisionObjectList.clear (); PersistentFrameListener :: Apagar ();} 

Una de las razones para la creación de la clase PersistentFrameListener era trabajar en torno a un tema en Ogre donde FrameListeners aún podrían tener su función evento llamado incluso después de que fueron retirados de la colección mantenida por el objeto OgreRoot con la función removeFrameListener.

El CollisionManager muestra por qué este es el caso.

En funcionan los FrameEnded la CollisionManager recorre todos los CollisionObjects comprobación de colisiones. Si se encuentra una colisión, la función de colisión en el CollisionObjects que chocan se llama. Como se ha señalado anteriormente, uno de los resultados de una colisión puede ser que uno de los objetos en colisión se retira llamando a su función de apagado.

Sin una pequeña solución, esta función de apagado eliminará el CollisionObject de la colección mantenida por el CollisionManager - el mismo que nos bucle sobre para detectar la colisión en el primer lugar. Esto es un problema porque

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