*   >> lukeminen koulutus Artikkelit >> science >> programming

Making 3D-peli, jossa Ogre - Collision Detection

.com * Verkkosivusto: https://www.brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONMANAGER_H_ # määritellä COLLISIONMANAGER_H_ # kuuluu "PersistentFrameListener. h "#include" CollisionObject.h "#include" lista "#define COLLISIONMANAGER CollisionManager :: oikeusasteen () typedef std :: lista CollisionObjectList; luokka CollisionManager: julkinen PersistentFrameListener {julkinen: ~ CollisionManager (); staattinen CollisionManager & oikeusasteen () {staattinen CollisionManager esimerkiksi; palata esimerkiksi; } Void Startup (); void sammutus (); mitätöi AddCollisionObject (CollisionObject * kohde); mitätöi RemoveCollisionObject (CollisionObject * kohde); BOOL FrameEnded (vakio FrameEvent & EVT); suojattu: CollisionManager (); void AddNewObjects (); void RemoveDeletedObjects (); CollisionObjectList collisionObjectList; CollisionObjectList newObjects; CollisionObjectList deletedObjects,}, # endif

CollisionManager.

cpp

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

clear (); PersistentFrameListener :: sammutus ();}

Yksi syy luomiseen PersistentFrameListener luokka oli kiertää ongelman Ogre jossa FrameListeners voisi silti olla niiden tapahtuma toiminto nimeltään vaikka ne poistettiin kokoelma ylläpitämään OgreRoot esine kanssa removeFrameListener toiminto. CollisionManager osoittaa, miksi näin on.

FrameEnded toimiakseen CollisionManager silmukoiden läpi kaikki CollisionObjects tarkistaa törmäyksiä. Jos törmäys löytyy, Collision toiminto törmäävän CollisionObjects kutsutaan.

Kuten aiemmin todettiin, yksi tulosten yhteentörmäys voi olla, että yksi törmäävän esineet poistetaan kutsumalla sen sammutus toiminto. Ilman pieni kiertotapaa, tämä sammutus toiminto poistaa CollisionObject kokoelmasta ylläpitämästä CollisionManager - aivan sama, joka olimme silmukoiden yli havaita törmäyksen ensiksi. Tämä on ongelma, koska jos muokkaat kokoelma (mukaan vaikkapa poistamalla erä siitä), kun kiehkura päälle soveltaminen kaatua.


Voit välttää tämän ongelman kaikki uudet ja poistetut kohteet tallennetaan väliaikainen kokoelmissa newObjects ja deletedObjects (kautta AddCollisionObject ja RemoveCollisionObject toiminnot), jossa uusi ja poistetut kohteet synkronoidaan pääkokoelman (kautta Add

Page   <<  [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 lukeminen koulutus Artikkelit,https://koulutus.nmjjxx.com All rights reserved.