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

Making 3D-peli, jossa Ogre - Collision Detection

NewObjects ja RemoveDeletedObjects toiminnot) ennen kuin aloitamme silmukoiminen yli sen FrameEnded toiminto. Tämä on sama prosessi käyttää FrameListeners, ja sivuvaikutus on, että poistetut kohteet pysyvät pääkokoelman jälkeen "poistettu" ja ovat niiden toiminnot kutsutaan.

Laajentamalla PersistentFrameListener luokan ja jäljellä allas deaktivoitu tila (joka on mitä vihollisia ja aseita jo tehdä), esineitä, jotka ulottuvat CollisionObject luokan edelleen olemassa ja voi olla niiden toiminnot kutsuttu ilman kaatuu järjestelmään.

CollisionManager vain soittaa Collision toiminto jos CollisionObject on aktiivinen, varmistaa, että sammuttaa esineet eivät osallistu törmäyksissä.

Miksi törmäysten havaitseminen koodi on FrameEnded toiminto on sillä haluamme kaikki meidän esineet ovat päivitetty tehtävissään ennen havaitsemiseksi törmäyksiä.

Koska se olisi vaikea varmistaa, että CollisionManagers FrameStarted toimintoa kutsuttiin ennen tai jälkeen kaikki muut pelin esineet, tekee törmäyksen havaitseminen FrameStarted toiminto voisi johtaa epäjohdonmukainen tilanteeseen, jossa puolet pelistä esineitä päivitetty itse, törmäystarkastelu laskettiin, ja sitten viimeinen puolet muita esineitä päivitetty itse.

 mitätöidä CollisionManager :: AddCollisionObject (CollisionObject * kohde) {newObjects.push_back (kohde);} void CollisionManager :: RemoveCollisionObject (CollisionObject * kohde) { deletedObjects.

push_back (kohde);} void CollisionManager :: AddNewObjects () {varten (CollisionObjectList :: iteraattori iter = newObjects.begin (); iter! = newObjects.end (); ++ ITER) {collisionObjectList.push_back (* ITER ); } NewObjects.clear ();} void CollisionManager :: RemoveDeletedObjects () {varten (CollisionObjectList :: iteraattori iter = deletedObjects.begin (); iter! = DeletedObjects.end (); ++ ITER) {collisionObjectList.remove (* ITER ); } DeletedObjects.

clear ();} bool CollisionManager :: FrameEnded (vakio FrameEvent & EVT) {AddNewObjects (); RemoveDeletedObjects (); varten (CollisionObjectList :: iteraattori iter1 = collisionObjectList.begin (); iter1! = collisionObjectList.end (); ++ iter1) {CollisionObjectList :: iteraattori iter2 = iter1; ++ Iter2; varten (; iter2! = collisionObjectList.

end (); ++ iter2) {CollisionObject * const object1 = * iter1; CollisionObject * const object2 = * iter2; jos (object1-> IsStarted () && object2-> IsStarted ()) {const Sphere & object1Sphere = object1-> GetBoundingSphere (); const Sphere & object2Sphere = object2-> GetBoundingSphere (); jos (object1Sphere.intersects (object2Sphere)) {object1-> Collision (object2); object2->

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