Ved å utvide PersistentFrameListener klasse og igjen i et basseng i upåvirket tilstand (som er hva fiender og våpen allerede gjør), gjenstander som utvider CollisionObject klassen fortsatt eksisterer og kan ha sine funksjoner kalt uten å krasje systemet. Den CollisionManager vil bare kalle Kollisjon funksjon hvis CollisionObject er aktiv, slik at stenge gjenstander ikke deltar i kollisjoner.
Grunnen til at dueller kode er i FrameEnded funksjonen er fordi vi ønsker alle våre objekter for å ha oppdatert til sine nye posisjoner før detektere kollisjoner.
Fordi det ville være vanskelig å sikre at CollisionManagers FrameStarted funksjonen ble kalt før eller etter alle de andre spillobjektene, gjør dueller i FrameStarted funksjonen kan føre til en inkonsekvent situasjon hvor halvparten av spillobjektene oppdatert seg selv, dueller . ble beregnet, og deretter i siste halvdel av andre objekter oppdatert seg
annullere CollisionManager :: AddCollisionObject (CollisionObject * objekt) {newObjects.push_back (objekt);} void CollisionManager :: RemoveCollisionObject (CollisionObject * objekt) { deletedObjects.push_back (objekt);} void CollisionManager :: AddNewObjects () {for (CollisionObjectList :: iterator ITER = newObjects.begin (); ITER = newObjects.end ();! ++ ITER) {collisionObjectList.push_back (* ITER ); } NewObjects.clear ();} void CollisionManager :: RemoveDeletedObjects () {for (CollisionObjectList :: iterator ITER = deletedObjects.begin ();! ITER = deletedObjects.end (); ++ ITER) {collisionObjectList.remove (* ITER ); } DeletedObjects.
clear ();} bool CollisionManager :: FrameEnded (konst 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 * konst object1 = * iter1; CollisionObject * konst object2 = * iter2; if (object1-> IsStarted () && object2-> IsStarted ()) {konst Sphere & object1Sphere = object1-> GetBoundingSphere (); konst Sphere & object2Sphere = object2-> GetBoundingSphere (); if (object1Sphere.intersects (object2Sphere)) {object1-> Collision (object2); object2->
Komme i gang med Activeperl
- Referanse i C ++
- Hvordan lage Nøkkel Generatorer
- Opprette en live Twitter statusoppdatering med YQL og JavaScript
- Unntak håndtering i C ++
- Vektor Modifikatorer i C ++
- Mysql Tilgang Gull Overview
- Spesifisere Unntak funksjoner i C ++
- Hvordan implementere diskusjonen i Java?
- Komme i gang med Javascript
- Hvordan lage Windows XP Look Like Windows 7