*   >> läser Utbildning artiklar >> science >> programming

Att göra en 3D-spel med Ogre - Collision Detection

nager.h Omdömen
 /* * CollisionManager.h * * Författare: Matthew Casperson * Email: [email protected] * Hemsida: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # definierar COLLISIONMANAGER_H_ # include "PersistentFrameListener. h "#include" CollisionObject.

h "#include" lista "#define COLLISIONMANAGER CollisionManager :: instansrätten () typedef std :: lista CollisionObjectList, klass CollisionManager: public PersistentFrameListener {public: ~ CollisionManager (); statisk CollisionManager & instansrätten () {statisk CollisionManager instans; retur exempel; } Void start (); void avstängning (); void AddCollisionObject (CollisionObject * objekt); void RemoveCollisionObject (CollisionObject * objekt); bool FrameEnded (const FrameEvent & evt); skyddas: CollisionManager (); void AddNewObjects (); void RemoveDeletedObjects (); CollisionObjectList collisionObjectList; CollisionObjectList newObjects; CollisionObjectList deletedObjects;}; # endif

CollisionManager.

cpp Omdömen

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

clear (); PersistentFrameListener :: avstängning ();}

En av anledningarna till att skapa PersistentFrameListener klassen var att komma runt ett problem i Ogre där FrameListeners fortfarande kunde ha deras evenemang funktion som kallas även efter att de togs bort från samlingen upprätthålls av OgreRoot objektet med removeFrameListener funktionen. Den CollisionManager visar varför detta är fallet. Omdömen

I FUNKTION FrameEnded den CollisionManager loopar igenom alla CollisionObjects checkar för kollisioner.

Om en kollision hittas är kollisionsfunktionen på de kolliderande CollisionObjects kallas. Som tidigare nämnts, kan ett av resultaten av en kollision är att en av de kolliderande föremålen avlägsnas genom att ringa sin avstängning funktion. Utan en liten lösning, kommer detta avstängning funktionen bort CollisionObject från samlingen sköts av CollisionManager - precis samma som vi skulle kretsa över att upptäcka kollisionen i första hand. Detta är ett problem eftersom om du ändrar en samling (genom att säga att ta bort ett objekt från det), medan looping över den ansökan skulle krascha.

Omdömen

För att undvika det här problemet alla

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 läser Utbildning artiklar,https://utbildning.nmjjxx.com All rights reserved.