基于cocos2d-js和chipmunk,创建了一个简单Scene和一个layer,初始化space,加入一个body、一个shape、一个physicsSprite,然后支持拖拽layer和body。
遇到第一个坑来自于cocos2d-js,它有几种渲染模式,定义在project.json里,默认为0
// "renderMode" sets the renderer type, only useful on web :
// 0 - Automatically chosen by engine
// 1 - Forced to use canvas renderer
// 2 - Forced to use WebGL renderer, but this will be ignored on mobile browsers
其中canvs渲染模式下,physicsSprite::syncPhycisTransform()函数坐标位置转换有bug,导致屏幕上显示的图像和物理节点位置不一致。此问题已经修复如下
第二个坑来自于chipmunk,问题出在pointQueryFirst,这个函数是用来查询触摸点位置是否存在物理节点。这个bug导致我们在模拟器、web上都运行正常,但是在device上出错。目前暂时的解决办法是把第二个参数改为cp.ALL_LAYERS,如下
var shape = _space.pointQueryFirst(_mousePos, cp.ALL_LAYERS, cp.NO_GROUP)