众所周知cocs2dx 3.x中有个Physics的封装,本意可能是想同时封装chipmunk和box2d,但为什么只实现了chipmunk就不管box2d了呢。。
最近尝试了一下,chipmunk问题很多,只要PhysicsBody速度够快,即便是和staticBody或Edge碰撞都可能发生穿透,而且即使没有发生穿透,如果持续给一个body设置速度,它就会无视碰撞,堂而皇之的穿透出去。。
然后看了一下TestCpp中box2d相关的代码,发现box2d的表现明显更好。
cocos2d实现了cocos2d::PhysicsSprite,但它的实现却很有问题。
- 一是在每个PhysicsSprite中都监听Director::EVENT_AFTER_UPDATE事件,在其中同步Box2d世界和cocos世界中的坐标,但其实完全可以在cocos2d::Node::visit中进行同步
- 二是同步坐标时根本没有考虑父子结点的关系,只有在所有PhysicsSprite都直接挂接在Scene上时,才能正常工作
- 如果一个游戏场景中有ui、main、background等存在相对位移的层级结点,进行坐标同步时的基准结点应该是main结点,在绘制box2d的debug模式时,modelView矩阵也必须基于main结点
- 它可以用来初始化Box2d b2World,并被设置为基准结点,基准结点监听Director::EVENT_AFTER_UPDATE以便进行b2World::Step,在draw时向渲染队列插入自定义事件,以便绘制box2d的debug信息。
- 它可以用来创建B