Ao estender a classe PersistentFrameListener e permanecendo em uma piscina em um estado desativado (que é o que os inimigos e armas já fazem), objetos que se estendem a classe CollisionObject ainda existem e podem ter suas funções chamado sem derrubar o sistema. O CollisionManager só vai chamar a função de colisão se o CollisionObject está ativa, garantindo que desligar objetos não participam de colisões.
A razão pela qual o código de detecção de colisão está na função FrameEnded é porque queremos que todos os nossos objetos para ter actualizado para suas novas posições antes de detectar colisões. Porque seria difícil de assegurar que a função CollisionManagers FrameStarted foi chamado antes ou depois de todos os outros objectos de jogo, fazendo a detecção de colisão na função FrameStarted poderia conduzir a uma situação inconsistente onde metade dos objectos de jogo-se actualizado, o de detecção de colisão .
foi calculado, e, em seguida, a última metade de outros objetos atualizado si
anular CollisionManager :: AddCollisionObject (CollisionObject * object) {newObjects.push_back (objeto);} vazio CollisionManager :: RemoveCollisionObject (CollisionObject * object) { deletedObjects.push_back (objeto);} vazios CollisionManager :: AddNewObjects () {for (CollisionObjectList :: iterator iter = newObjects.begin (); iter = newObjects.end (!); iter ++) {collisionObjectList.push_back (* iter ); } NewObjects.clear ();} vazios CollisionManager :: RemoveDeletedObjects () {for (iter CollisionObjectList :: iterator = deletedObjects.begin (!); Iter = deletedObjects.end (); iter ++) {collisionObjectList.remove (* iter ); } DeletedObjects.clear ();} bool CollisionManager :: FrameEnded (const FrameEvent & evt) {AddNewObjects (); RemoveDeletedObjects (); for (CollisionObjectList :: iterator iter1 = collisionObjectList.begin (!); iter1 = collisionObjectList.end (); iter1 ++) {CollisionObjectList :: iterator iter2 = iter1; ++ iter2; for (;! iter2 = collisionObjectList.
end (); iter2 ++) {CollisionObject * const object1 = * iter1; CollisionObject * const object2 = * iter2; if (object1-> IsStarted () && object2-> IsStarted ()) {const Sphere & object1Sphere = object1-> GetBoundingSphere (); const Sphere & object2Sphere = object2-> GetBoundingSphere (); if (object1Sphere.intersects (object2Sphere)) {object1-> Collision (object2); object2->
Começando com Activeperl
- Móvel Lançamento Skypephone
- Fazendo um clone de Space Invaders com PushButton - Bullets
- C-Sharp
- Eclipse IDE for Java Programmers
- Guia para Iniciantes uma linguagem de programação: Php
- Projetando banco de dados Tables
- Mysql data e hora Functions
- Estilos classe de janela
- Como configurar suas conexões de rede do Windows Vista
- Aplicativo de console para criar Triângulo Pirâmide Usando C # Code