box2D斜面摩擦力和sprite朝向的兼顾取舍

问题起源:

        一般游戏的主角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()可以获取。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值