问题起源: 一般游戏的主角player的b2body的fixedrotation属性都设置为true,即不能旋转,这样可以保证player在受到物理冲力的时候不会扭来扭去,比如超级玛丽他的人物模型始终是直立的。当player遇到斜面物体时,它和斜面之间只有一个接触点,这样就没有摩
问题起源: 一般游戏的主角player的b2body的fixedrotation属性都设置为true,即不能旋转,这样可以保证player在受到物理冲力的时候不会扭来扭去,比如超级玛丽他的人物模型始终是直立的。当player遇到斜面物体时,它和斜面之间只有一个接触点,这样就没有摩擦力,这会造成player运动状态的失真。
如果将player的fixedrotation设置为false,即可以旋转,这时摩擦力正常,但player的sprite图片也会跟着旋转,有时却希望sprite仍保持直立。
解决方法:一、 始终fixedrotation=true, 当player在斜面上时,将player的body构造成底部为斜边的polygon,并且倾斜角度和斜面角度相同。在平面上时,body底部改为平面。
缺点:1. 不能适应各种角度的斜面。
2. 由于box2d中b2fixture不能变形,b2body对象想要改变形状,其中包含的b2fixture对象要反复创建,销毁,工作繁复,效率不高。
二、当player在平面上时,fixedrotation=true; 当player在斜面上时,fixedrotation=false;然后player的sprite图片根据斜面的角度转动相应的角度。
具体做法大概是:建一个斜面类继承自ccsprite,类成员包括斜面的b2body,斜面的角度degree,类方法包括斜面的创建方法createinclineplane(),在这个方法中得到斜面的degree。在需要用到degree的时候,用degree的getor()可以获取。