2
\$\begingroup\$

I'm working on a platforming game with tile based levels. I store the collision model for my tileset in an array.

This is how the collision model for a 4x4 tilesheet would look like (I can't post pictures yet so this link will have to suffice: Tileset example). The red dots are the vertices of the b2ChainShape.

When I load a level, I look up the collision model for each tile and create a b2Body at the corresponding place. The problem is that between the tiles, my character can experience a "bump" because it gets stuck on the edge of the shape of the next tile's body.

Is there an existing algorithm to connect the bodies of neighbouring tiles to a single b2ChainShape? Or should I ditch the idea of tile-based collision models all together and simply create the collision model for the whole map with the Tiled map editor? I don't create the the collision map with the Tiled map editor at the moment, because it is very time consuming for slopes and hills.

\$\endgroup\$

1 Answer 1

0
\$\begingroup\$

You could just walk through your tiles in a top-left-bottom-right way, then create an outline for each of the connected tiles programmatically, similar to the marching squares algorithm: http://en.wikipedia.org/wiki/Marching_squares

Each time a piece of the "countour line" changes direction, you create an edgeshape for it. You can now set so called ghost vertices for these edge shapes; vertex0 for the current edgeshape to vertex2 of the previous edgeshape and vertex3 of the previous edgeshape to vertex1 of your current edgeshape, this process is explained here: http://www.iforce2d.net/b2dtut/ghost-vertices

This would basically give a hint to box2d how to resolve the collision response to contact points between the different edgeshapes.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .