Hi folks, I just wanted to know - has this 'known issue' been addressed? Do Erin or Boris consider it an issue? What are the thoughts?
I'm still having trouble with it. I've uploaded a couple of examples, stripped down to the most basic environment in which this issue happens for me.
Note that the game I'm building is in XNA, using Box2D.XNA, but since I've used Box2D several times before in Flash/AS3, I thought it a good idea to try and remove the possibility that it's something I'm doing wrong in Box2D.XNA or that it's something not quite right with the library port.
Here they are:
http://www.shauncampbell.co.uk/flash/box2d/http://www.shauncampbell.co.uk/flash/box2d/octagonal.htmlUse the arrow keys to move (Up to jump). You can still use the mouse to click and drag the box. Arrow key controls use body.GetLinearVelocity().x += movementSpeed. Note that in the AS3 version, the linear velocity is returned as a reference (meaning this isn't a mistake!).
So, you can obviously test the issue by dragging the box along the boxes. That means it's not only due to the implementation of character movement by manipulating linear velocity directly.
Use the button at the top if you want to toggle fixed rotation on the player body. This can make the issue a little clearer - with fixed rotation off, the body simply stops, but it's obvious when turning fixed rotation
off that it's actually getting slightly stuck on something, and with rotation on it just rolls on past it - both behaviours are unnacceptable for my game.
I've been considering using b2EdgeChain, as the octagonal or circular body methods don't really work for me. I don't want to continue on knowing that the player can move to the edge of a platform and slide off it when not expecting it. The player won't be an obvious rectangle but I think it's more likely the player will assume that's how it's treated, rather than it being circular or octagonal.)
My problem with b2EdgeChain is that I've already build a level editor that works really well with tiles. It uses brushes, erasers, and tiles can be selected in groups and dragged around. If I have to do passes over these tiles before 'compiling' the level (outputting to XML), it's going to detract from actually getting on and building the game. Besides that, isn't it going to become quite complex to fully 'join' the whole world together as one edge. This problem can occur when pushing into a wall as you fall, too, so it's basically going to have to be done on every wall, every edge. We thought about implementing gravity switching, so I'd have to go and do this on ceilings, too.
Another thought on b2EdgeChain - if I was to, in my editor, step through and calculate some b2EdgeChain that goes around the whole level and any 'islands' inside the level, what would happen if any of those yielded concave shapes? Do b2EdgeChains handle concave shapes? I know that you can't create a rigid body using PolygonShape with vertices laid out in concave. Does this mean I'd have to not only calculate my edges, but then split them up where they go concave? Then, I'd have gaps again, which the player would surely be able to get stuck in, as per the original setup I had.