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

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

ionType ) {COLLISIONMANAGER.AddCollisionObject (this);} CollisionObject :: ~ CollisionObject () {COLLISIONMANAGER.RemoveCollisionObject (this);}.

As funções de inicialização e desligamento adicionar e remover o objeto local do CollisionManager

 anular CollisionObject :: Startup () {PersistentFrameListener :: Startup ();} vazio CollisionObject :: Shutdown () {PersistentFrameListener :: Shutdown ();} 

PersistentFrameListener.h

O outro grande problema com colisão detecção é garantir que os objetos não se movem através de outro durante o quadro.

Iremos abordar isso definindo um tempo máximo em cada quadro, que, assumindo os objetos em colisão não são muito pequenas e se movendo muito rápido, vai garantir que os dois objetos. Isso é feito na classe PersistentFrameListener, que agora também inclui uma função chamada FrameEnded que é chamado uma vez por quadro após FrameStarted foi chamado em todos os objetos ativos

 /* * * * PersistentFrameListener.h Autor:. Mateus Casperson * Email: * [email protected] Website: https://www.brighthub.com/hubfolio/matthew-casperson.

aspx * /# ifndef PERSISTENTFRAMELISTENER_H_ # definir PERSISTENTFRAMELISTENER_H_ # incluem "Ogre.h" #include "OgreEngineManager.h "#include" GameConstants.h "class PersistentFrameListener: FrameListener pública {public: PersistentFrameListener (): isStarted (false) {ENGINEMANAGER.GetRoot () -> addFrameListener (this); } Virtuais ~ PersistentFrameListener () {if (! ENGINEMANAGER.GetRoot () = NULL) ENGINEMANAGER.

GetRoot () -> removeFrameListener (this); } Vazio Startup () {isStarted = true; } Shutdown void () {isStarted = false; } Bool frameStarted (const FrameEvent & evt) {if (this-> isStarted) retornar FrameStarted (GetFixedFrameEvent (EVT)); return true; } Bool frameEnded (const FrameEvent & evt) {if (this-> isStarted) retornar FrameEnded (GetFixedFrameEvent (EVT)); return true; } Virtual bool FrameStarted (const FrameEvent & evt) {return true;} FrameEnded bool virtual (const FrameEvent & evt) {return true;} bool IsStarted () const {return isStarted;} protegido: FrameEvent GetFixedFrameEvent (const FrameEvent & evt) {FrameEvent fixa; fixed.

timeSinceLastFrame = evt.timeSinceLastFrame> MAX_FRAME_TIME? MAX_FRAME_TIME: evt.timeSinceLastFrame; retornar fixo; } Bool isStarted;};. # Endif /* PERSISTENTFRAMELISTENER_H_ * /

O CollisionManager é o lugar onde todos os objetos são testados contra o outro para colisões

CollisionManager.h

 /* * Colli

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