2d collision detection for cse 3902 by: matt boggus

Post on 25-Dec-2015

212 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

2D Collision Detection

For CSE 3902By: 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

• 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 dataRaster graphic sprites (left) and masks (right)

Square-square test

Square-square test

Square-square top-bottom collision

Square-square left-right collision

Non-square collision example (values indicate top-bottom)

Axis-aligned bounding box testing

Axis-aligned bounding box testing

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, an

empty rectangle if there is no overlap– Example call: Rectangle.Intersect(rectangleA,rectangleB);

Rectangle Intersect left-right

Rectangle Intersect top-bottom

TYPES OF COLLISION LOOPS

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

• foreach dynamic object, test against all other dynamic objects, taking care not to duplicate tests

top related