Ved at udvide PersistentFrameListener klasse og tilbage i en pulje i en deaktiveret tilstand (hvilket er, hvad fjender og våben allerede gør), findes der stadig ting, som udvider CollisionObject klassen og kan have deres funktioner kaldes uden at crashe systemet. Den CollisionManager vil kun kalde Collision funktionen hvis CollisionObject er aktiv, der sikrer, at lukke ned genstande ikke deltager i kollisioner.
Grunden til kollisionen afsløring kode er i FrameEnded funktionen fordi vi ønsker alle vores objekter for at have opdateret til deres nye positioner før afsløring kollisioner. Fordi det ville være vanskeligt at sikre, at CollisionManagers FrameStarted funktionen blev kaldt før eller efter alle de andre spil objekter, gør kollisionsdetektion i FrameStarted funktionen kan føre til en inkonsekvent situation, hvor halvdelen af de spil objekter opdateret selv, kollisionsdetektion .
blev beregnet, og derefter den sidste halvdel af andre genstande opdateret sig
ugyldiggøre 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 (const 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 * const object1 = * iter1; CollisionObject * const object2 = * iter2; hvis (object1-> IsStarted () && object2-> IsStarted ()) {const Sphere & object1Sphere = object1-> GetBoundingSphere (); const Sphere & object2Sphere = object2-> GetBoundingSphere (); IF (object1Sphere.intersects (object2Sphere)) {object1-> Kollision (object2); object2->
Kom godt i gang med Activeperl
- Sende HTML Form med ActivePerl
- Påstande og Fejl Tal i C ++
- Abstract Factory Design Pattern
- Pakker og N-Ary Association
- Mysql Opret tabel SQL-sætning af Chrys
- Udfør Smertefri SEO med Best Firefox Extensions
- Grundlæggende om C ++ Identifier Scope
- En kort oversigt over SQL Injection
- Programmør Ved Heart
- Edit Control i Windows