Box2D Flex Complex Shapes Mapping
One of the drawbacks in box2d is that it’s not supporting concave polygon shapes .
for that box2d flex employs several algorithms and converts a complex shape to a set of polygons (I took the idea from 3d modeling)
at this point i would like to give credits to
both state that their algorithms are far from perfect but for a v0.2 it’s a good start.
in this case I’ll start from the demo and then go into the code so see how the doll bellow is segmented to several triangles.
[iframe src=http://www.codeinvain.com/blog/wp-content/uploads/2010/07/Box2DDemos/OutlineShape.html width=802 height=602]
first thing is to understand how what the doll constructs of , in our case it’s a graphics
our object can be comprised of anything , graphic shapes , ui controls, images etc’ it has only one caveat - It’s edges must be transparent .
The next thing it to take a look at our physics container
you can see that autoStartPhysicsEngine is set to false. By default SkinnablePhysicsContainer maps all it’s flex objects to box2d shapes on creation, this time we want to interfere before hand and give the engine a different directive to try and map the shape not by it’s boundingBox but by it’s actual edges.
This is done by actionscript code, in which we tell our physics container to parse complex shape and pass it with the shape id and a parsing object, afterwards we call the physics engine to start.
you can see the the shape parser receives an argument specifying the quality of it’s mapping , this is done for performance improvement but might impair edges fidelity.