*   >> Leitura Educação Artigos >> science >> programação

Fazendo um jogo 3D com Ogre - Detecção de colisão

sionManager.h * * Autor: Matthew Casperson * Email: * [email protected] Website: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # definir COLLISIONMANAGER_H_ # incluem "PersistentFrameListener. h "#include" CollisionObject.h "#include" lista "#define COLLISIONMANAGER CollisionManager :: Instância () typedef std :: lista CollisionObjectList; classe CollisionManager: PersistentFrameListener pública {public: ~ CollisionManager (); estática CollisionManager & Instância () {instância CollisionManager estático; instância retornar; } Vazio Startup (); Shutdown void (); anular AddCollisionObject (CollisionObject * objeto); anular RemoveCollisionObject (CollisionObject * objeto); bool FrameEnded (const FrameEvent & EVT); protegido: CollisionManager (); AddNewObjects void (); RemoveDeletedObjects void (); CollisionObjectList collisionObjectList; CollisionObjectList newObjects; CollisionObjectList DeletedObjects;}; # endif

CollisionManager.

cpp

 # include "CollisionManager.h"CollisionManager::CollisionManager(){}CollisionManager::~CollisionManager(){}void CollisionManager :: Startup () {PersistentFrameListener :: Startup ();} vazio CollisionManager :: Shutdown () {newObjects.clear (); deletedObjects.clear (); collisionObjectList.

clear (); PersistentFrameListener :: Shutdown ();}

Uma das razões para a criação da classe PersistentFrameListener foi para contornar um problema em Ogre onde FrameListeners ainda poderia ter sua função de evento chamado, mesmo depois que eles foram retirados da coleção mantida pelo objeto OgreRoot com a função removeFrameListener. O CollisionManager mostra por que este é o caso.

Nos FrameEnded funcionar o CollisionManager percorre todos os CollisionObjects verificando colisões. Se a colisão for encontrado, a função de colisão nas CollisionObjects colisão é chamado.

Como foi referido anteriormente, um dos resultados de uma eventual colisão pode ser que um dos objetos que colidem é removido chamando a função de desligamento. Sem uma pequena solução alternativa, esta função de desligamento irá remover o CollisionObject da coleção mantida pelo CollisionManager - o mesmo que nós estávamos um loop sobre para detectar a colisão em primeiro lugar. Este é um problema, porque se você modificar uma coleção (por exemplo remover um item a partir dele), enquanto um loop sobre ele a aplicação iria falhar.


Para evitar esse problema todos os novos e removidos objetos são ar

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Leitura Educação Artigos,https://artigos.nmjjxx.com All rights reserved.