Question

I'm working on a platformer for the iPhone that is using Box2D and cocos2D.

I'm trying to figure out a way to create similar behavior for my controlled character as is found in the Sonic the Hedgehog games, but maintain use of the Box2D physics library as I want projectiles and some level objects to behave according to realistic physics, along with certain situations involving the controlled character (jumping, barreling into objects, etc.).

The main issues that I'm running into are keeping the character on the ground when going over convex curves and maintaining a sense of contact with the ground until a significant distance from it is achieved. I only want the character to react to left and right commands when on the ground, but my shape tends to leave the ground when going over slight curves such that reaction time is delayed briefly until contact us reestablished. Visually there is no separation, but it's big enough to change the state of being on the ground or not. Also, the character does not "hug" bigger curves the way I would like.

I've tried exerting an additional downward force when on the ground, but it doesn't work quickly enough for bigger curves, and large enough forces to be effective interfere with the regular movement of the character. Any thoughts on these issues?

Was it helpful?

Solution

In my experience, getting true console-like feeling in requires you to create unrealistic physics, for player characters especially.

I believe in box2d you could use impulses to hack the movement system, while still having access to collision detection. It was either that, or making your character a non-moving object, and doing the movement yourself. I forget which seemed to work for me. It's been a few months ;) I believe I also did some nullifying of vectors on the y axis in some cases to fix bugs (slopes?).

If your movement is working properly for the general case, you could make movement when in ground contact with a curve be a special case, where you handle the physics yourself, and only hang out in the real world for collision detection.

Another option is to make most objects use "fake" physics, and use box2d only for collision detection, or for "realistic" objects.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top