Genom att förlänga PersistentFrameListener klassen och som finns kvar i en pool i en avaktiverad tillstånd (vilket är vad fiender och vapen redan gör), föremål som utökar CollisionObject klassen fortfarande existerar och kan ha sina funktioner kallas utan att krascha systemet. Den CollisionManager kommer bara ringa kollisionsfunktionen om CollisionObject är aktiv, se till att stänga föremål inte deltar i kollisioner.
Omdömen
Anledningen kollisionsdetektering kod finns i FrameEnded funktionen är att vi vill att alla våra objekt för att ha uppdaterat till sina nya positioner innan upptäcka kollisioner. Eftersom det skulle vara svårt att se till att CollisionManagers FrameStarted funktionen kallades före eller efter alla andra spel objekt, gör kollisionsdetektering i FrameStarted funktion skulle leda till en inkonsekvent situation där hälften av spel objekt uppdateras sig, kollisionsdetektering .
beräknades, och sedan den sista halvan av andra föremål uppdaterade sig Omdömen
annullera CollisionManager :: AddCollisionObject (CollisionObject * objekt) {newObjects.push_back (objekt);} void CollisionManager :: RemoveCollisionObject (CollisionObject * objekt) { deletedObjects.push_back (objekt);} void CollisionManager :: AddNewObjects () {för (CollisionObjectList :: iterator iter = newObjects.begin (); iter = newObjects.end ();! ++ iter) {collisionObjectList.push_back (* iter ); } NewObjects.clear ();} void CollisionManager :: RemoveDeletedObjects () {för (CollisionObjectList :: iterator iter = deletedObjects.begin ();! Iter = deletedObjects.end (); ++ iter) {collisionObjectList.remove (* iter ); } DeletedObjects.clear ();} bool CollisionManager :: FrameEnded (const FrameEvent & evt) {AddNewObjects (); RemoveDeletedObjects (); för (CollisionObjectList :: iterator iter1 = collisionObjectList.begin ();! iter1 = collisionObjectList.end (); ++ iter1) {CollisionObjectList :: iterator iter2 = iter1; ++ iter2; för (;! iter2 = collisionObjectList.
end (); ++ iter2) {CollisionObject * const object1 = * iter1; CollisionObject * const object2 = * iter2; if (object1-> IsStarted () && object2-> IsStarted ()) {const Sphere & object1Sphere = object1-> GetBoundingSphere (); const sfär & object2Sphere = object2-> GetBoundingSphere (); if (object1Sphere.intersects (object2Sphere)) {object1-> Kollision (object2); object2->
Komma igång med Activeperl
- Farm Hantering Software
- Vad är datastrukturer?
- Skapa ett Flash plattformsspel med flixel och Flex - Enemies
- Papervision 3D programmering tutorials - Clipping & amp; amp; Culling
- Akta stress !!!!
- Snabb introduktion till Uml
- ASP.
NET - C # - Hjälpen Mailer klass för mallbaserade e - post med inbäddade …
- Att göra en Space Invaders klon med tryckknapp - De första enemy
- Fönster Class Styles
- Php Array