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->
Aloitusopas Activeperl
- Luominen JavaScript Objects Literal Notation
- Windows Scroll Bar
- Saada Selkeys tiimityöskentelyyn SharePoint Web Parts
- PHP merkkijonon ja päivämäärä Basics
- PushButton opetusohjelma sarja - Enemies
- Java Variables
- Kirjoittaminen Page Frame Allocator
- Miten Kirjoita oma tukemat System
- Windows Staattinen Control
- Uusi Famous HTML Canvas Element