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

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

o download do demo e código fonte PARA WINDOWS

o download do demo e código fonte para Linux

Voltar ao Índice TUTORIAL

Neste ponto no demo temos inimigos e armas, mas os dois não interagem. Para que as balas para ser capaz de disparar sobre os inimigos é preciso adicionar a detecção de colisão.

A detecção de colisão é um assunto muito complicado, sendo o foco de muitos um trabalho de pesquisa.

No entanto, podemos ir longe com um sistema de detecção de colisão muito simples, porque a resposta para todas as colisões no jogo será a remoção de um dos objetos que colidem. A arma será removido quando ela atinge um navio e um navio inimigo será removido se choca com o jogador.

Cada objeto que é a colidir com outros objetos estende uma classe base chamada CollisionObject.

< p> CollisionObject.h

Queremos apenas objetos que estão ativos a serem envolvidos em colisões.

Queremos apenas os objetos que estão ativos a ser envolvido em uma colisão, por isso, estender a classe PersistentFrameListener, que nos dá acesso à função IsActive. Isso permitirá que o CollisionManager saber se o objeto deve participar de uma colisão

 /* * * * CollisionObject.h Autor:. Matthew Casperson * Email: * [email protected] Website: http: //www. brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONOBJECT_H_ # definir COLLISIONOBJECT_H_ # incluem "Ogre.h" #include "PersistentFrameListener.

h" usando namespace Ogre; classe CollisionObject: PersistentFrameListener pública {public: CollisionObject (int collisionType) ; Virtual ~ CollisionObject (); anular Startup (); Shutdown void (); int GetCollisionType () const {return collisionType;}

A função GetBoundingSphere é puro virtual, o que significa que ele tem que ser implementado pela classe estendendo. Esta função deve retornar uma esfera em coordenadas globais que circunda o objeto na tela

 esfera virtual GetBoundingSphere () = 0;. 

A função de colisão é chamado quando uma colisão é detectada entre dois objetos.

Cabe à classe estender ou não a participar na colisão (assim um inimigo que está colidindo com uma arma inimigo não faria nada em resposta a uma colisão).

 virtual vazio Collision (CollisionObject * outro ) {} protegido: int collisionType;}; # endif 

CollisionObject.cpp

 #include "CollisionObject.h" #include "CollisionManager.h" CollisionObject :: CollisionObject (int collisionType): collisionType (collis

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