SDL:Tutorials:Collision Detection between 2 SDL Surfaces
From GPWiki(Redirected from C:Collision Detection between 2 SDL Surfaces)
The wiki is now hosted by GameDev.NET at wiki.gamedev.net. All gpwiki.org content has been moved to the new server. However, the GPWiki forums are still active! Come say hello. This exceptional page is currently uncategorized.
Help in the categorization process by discussing where it should go. a pixel perfect collision test between SDL_Surface *a positioned at (104,600) SDL_Surface *b positioned at (708,256) if(SDL_CollidePixel(a,104,600 , b,708,256)) // ... SDL_Surface bounding box intersection (fast but inaccurate) SDL_Surface *a positioned at (104,600) SDL_Surface *b positioned at (708,256) if(SDL_CollideBoundingBox(a,104,600 , b,708,256)) // ... SDL_Rect bounding box intersection SDL_Rect a; SDL_Rect b; if(SDL_CollideBoundingBox(a,b)) // ... circle intersection (better than bounding box test on smaller objects such as bullets) circle A has centre at (10,90) with a radius of 3 circle B has centre at (7,600) with a radius of 10 allow a gap between circles of 2 if(SDL_CollideBoundingCircle(10,90,3 , 7,600,10 , 2)) // ... circle intersection, but approximated from SDL_Surfaces. radius and centre of the circle is approximated from the width and height of the surface. i.e a surface with width of 4 and height of 6 would have an approximate radius of 2.5 ((4+6)/2/2)and the centre would be offseted by (2,3) SDL_Surface *a positioned at (104,600) with width and height (4,6) SDL_Surface *b positioned at (708,256) with width and height (8,11) allow a gap between circles of 3 if(SDL_CollideBoundingCircle(a,104,600 , b,708,256 , 3) // ... // the algorithm approximates SDL_Surface *a centre at (106,603) with radius 2 (radius rounded down) SDL_Surface *b centre at (712,261) with radius 9 (radius and y rounded down) |


