What are Group Indices?
The group index flag can be used to override the category or mask of a fixture. As the name implies it can be used to group certain fixtures together to describe if they should or should not collide, a good example would be Friendly Fire, friendly players don't get hit by friendly bullets, vice versa.
A group index is an integer ranging from -32768 to 32767.
Fixture:setGroupIndex( index )
How they work
- if either fixture has a groupIndex of zero, use the category/mask rules as above
- if both groupIndex values are non-zero but different, use the category/mask rules as above
- if both groupIndex values are the same and positive, collide
- if both groupIndex values are the same and negative, don't collide
What we're really interested in are the last two points. \ I'll give an
example, say we have two rectangles, A
and B
.
A.fixture:setGroupIndex(1)
B.fixture:setGroupIndex(1)
They both have the same index, 1
, which is a positive number, therefore A
and B
will collide.
A.fixture:setGroupIndex(1)
B.fixture:setGroupIndex(-1)
Although A
and B
have the same absolute value, 1
, they are not the same
number, thus they fit into the point of non-zero but different.
A.fixture:setGroupIndex(-1)
B.fixture:setGroupIndex(-1)
Finally, both fixtures have the same index and are negative, therefore there is no collision between the fixtures.
References
http://www.iforce2d.net/b2dtut/collision-filtering \ https://love2d.org/wiki/Fixture:setGroupIndex