I’m a big advocate of using “homebrewed” physics engines in platformer games. For one thing, they’re pretty fun to make, for another, they’re much more “see-through” than the “real” physics engine, and for yet another, it’s just a nice thing to have a working physics engine you wrote in your game.
The “definitive guide” to platformer physics can be found here: The guide to implementing 2D platformers | Higher-Order Fun
A really good practical guide to platformer physics (Sonic) can be found here: http://info.sonicretro.org/SPG:Solid_Tiles
An argument against using a real physics engine in your game can be found here: http://www.learn-cocos2d.com/2013/08/physics-engine-platformer-terrible-idea/
Here’s a quote from a post I made on a similar question for more information:
Another very important reason not to use Box2D physics is tile borders: The usual way to add physics to tiles is to add a body to each tile. However, then, when the player goes from one tile to another, it may or may not “catch” at the seam between them. You have to work through this with changing the player body shape, setting the velocity every frame, and such as that.
This issue (as well as others, most of which are outlined in the article) has bothered me for a very, very long time. I’m using custom-made physics in my platformer game as a result.
And as for difficulty to implement, it’s not too difficult if you have a good guide. For example, it took me about one programming session (which for me is only about two hours) to get the initial version (walls, floors, ceilings) of platforming physics down with the Sonic guide I linked to. There’s no feeling like having a solid platformer physics base that you wrote yourself :D.
But! Platformer physics above the basic level can be a slightly advanced field of programming, and if you just want to “get it done”, you can try with Box2D. You just need to be aware of the pitfalls.