*   >> Lese Utdanning Artikler >> science >> programming

Å gjøre en 3D-spill med Ogre - Collision Detection

Last ned demoen og kildekode FOR WINDOWS

Last ned demoen og kildekode for Linux

TILBAKE TIL TUTORIAL INDEX

På dette punktet i demoen vi har fiender og våpen, men de to ikke samhandler. For at punktene skal være i stand til å skyte fiender vi trenger for å legge dueller.

Kollisjon påvisning er en svært komplisert emne, blir fokus for mange en forskningsartikkel. Men vi kan komme unna med en veldig enkel duellsystem fordi responsen på alle kollisjoner i spillet vil være fjerning av en av de kolliderende stedene.

Et våpen vil bli fjernet når den treffer et skip og et fiendtlig skip vil bli fjernet hvis det kolliderer med spilleren.

Hver objekt som er å kollidere med andre gjenstander strekker en base klasse kalt CollisionObject.

< p> CollisionObject.h

Vi ønsker bare objekter som er aktiv for å være involvert i kollisjoner. Vi ønsker bare de objektene som er aktiv for å være involvert i en kollisjon, så vi forlenge PersistentFrameListener klasse, noe som gir oss tilgang til IsActive funksjonen.

Dette vil la CollisionManager vite om objektet skal delta i en kollisjon

 /* * CollisionObject.h * * Forfatter:. Matthew Casperson * E-post: [email protected] * Nettsted: http: //www. brighthub.com/hubfolio/matthew-casperson.aspx * /# ifndef COLLISIONOBJECT_H_ # definere COLLISIONOBJECT_H_ # include "Ogre.h" #include "PersistentFrameListener.

h" bruker namespace Ogre, klasse CollisionObject: public PersistentFrameListener {public: CollisionObject (int collisionType) ; virtuell ~ CollisionObject (); ugyldig Startup (); void Shutdown (); int GetCollisionType () const {return collisionType;}

GetBoundingSphere funksjonen er rene virtuelle, noe som betyr at det må settes i verk ved å utvide klassen. Denne funksjonen skal returnere en Sphere i verden koordinater som grenser objektet på skjermen

 virtuell Sphere GetBoundingSphere () = 0;. 

Kollisjon funksjonen kalles når en kollisjon er oppdaget mellom to objekter.

Det er opp til å utvide klassen om ikke å delta i kollisjon (så en fiende som kolliderer med en fiende våpen ville ikke gjøre noe i respons til en kollisjon).

 virtual void Collision (CollisionObject * andre ) {} beskyttet: int collisionType;}; # endif 

CollisionObject.cpp

 #include "CollisionObject.h" #include "CollisionManager.h" CollisionObject :: CollisionObject (int collisionType): collisionType (collisionType ) {COLLISIONMANAGER.AddCollisi

Page   <<       [1] [2] [3] [4] [5] [6] >>
Copyright © 2008 - 2016 Lese Utdanning Artikler,https://utdanning.nmjjxx.com All rights reserved.