180 likes | 407 Views
2D Collision Detection. For CSE 3902 By: Matt Boggus. Outline. Collision tests Pixel-pixel Square-square Axis-aligned bounding box (rectangle) testing Collision detection loops Exhaustive comparison Static objects vs. dynamic objects. Collision Detection tests. Pixel-pixel test .
E N D
2D Collision Detection For CSE 3902 By: Matt Boggus
Outline • Collision tests • Pixel-pixel • Square-square • Axis-aligned bounding box (rectangle) testing • Collision detection loops • Exhaustive comparison • Static objects vs. dynamic objects
Pixel-pixel test • Given sprite pixel data and position on screen, make a binary mask for each sprite • Detection test • (XOR == 1) • Not intersecting • (XOR == 0) AND (OR == 1) • Intersecting • Pro: Accurate • Con: Slow; requires working with image data Raster graphic sprites (left) and masks (right)
XNA rectangle and methods • Given two rectangles rectangleA and rectangleB • Rectangle.Intersects(Rectangle) • Returns true if the rectangles are intersecting, otherwise false • Example call: rectangleA.Intersects(rectangleB); • Rectangle.Intersect Method (Rectangle, Rectangle) • Returns the area where the two rectangles overlap, anempty rectangle if there is no overlap • Example call: Rectangle.Intersect(rectangleA,rectangleB);
Exhaustive comparison • Given mario, enemyList (length n), and blockList (length m), test • mario vs. enemyList[0] through [n-1] • mario vs. blockList[0] through [m-1] • enemyList[0] vs. enemyList[1] through [n-1] • enemyList[1] vs. enemyList[2] through [n-1] • … • blockList[0] vs. blockList[1] through [m-1] ?
Static vs. Dynamic • Non-moving, or static, objects only need to be compared against dynamics, not other static objects • foreach static object, test against all dynamic objects • foreachdyamic object, test against all other dynamic objects, taking care not to duplicate tests