What could cause a sudden stop in Box2D?
- by alexanderpine
I'm using Box2d for a game, and I have a bug that's driving me nuts. I've simplified the situation down to a square player sliding back and forth frictionlessly on top of a floor composed of a series of square tiles, driven by the left and right keys (which apply a horizontal force). Works great, sliding back and forth across the whole floor.
Except... Every once in a while, the player will suddenly stick at the edge of one of the tiles as if it is hitting a (nonexistent) wall. Further pushes in the same direction it was traveling will fail, but as soon as I push backwards once in the opposite direction, I can push forwards past the sticking point again. The sticking point seems to be random, except for being on the edge of a tile. Happens while going left or right.
For debugging purposes, I keep the Positions/velocity values for the previous two update ticks and print them out when this stop occurs. As an example, here you see the player moving right, decelerating slightly; pos2 should be about 8.7, but it stops dead instead.
tick0: pos= 8.4636 vel= 7.1875
tick1: pos= 8.5816 vel= 7.0833
tick2: pos= 8.5816 vel= 0.0000
So, as the player is 0.8 and the tiles 1.0 wide, the player is stopping just as it is about to cross onto the next tile (8.5816 + 0.8/2 = 8.9816). In fact, I get a collision message (which I ignore except noting that it happened). It only seems to happen at x.5816 (or -x.4184) while moving right, and x.4167 (or -x.5833) while moving left
I said that it's like hitting a wall, but in fact, when it hits a wall, the numbers look more like:
tick0: pos0= 12.4131 vel2= 8.4375
tick1: pos1= 12.5555 vel1= 8.5417
tick2: pos2= 12.5850 vel0= 0.0000
so it moves further right on the last tick, which puts it in contact with the wall.
Anyone seen anything like this. Any suggestion on how I could be causing this behavior.