Box2D实现Super Mario之关键技术分析——mario下蹲通过低矮障碍物

来源:互联网 发布:淘宝牛仔裤哪家好 编辑:程序博客网 时间:2024/05/02 06:11

一、问题起源

         变大之后的Mario的b2Body的宽高是16×32,而障碍物允许通过的高度只有16,游戏里的效果是,Mario借助惯性,在下蹲时滑行通过障碍物。(比如world1-2中开头的地方)。


         若只滑倒障碍物宽度的一半,根据玩家的操作有2中情况:

1. 松开“下蹲”键恢复站立姿势时,mario自动向右滑出障碍物范围;


2. 在按着下蹲键的同时,按下“跳跃”键,mario顶破上方石块并卡在障碍物的空里。

 

二、解决方法

        

 1.仔细观察原游戏效果的时候发现,下蹲的时候确实是重建了一个b2Body高度只有原来一半的新刚体。

         销毁b2Body,重建一个高度较小、可以通过障碍物的新刚体,那么mario会在初始碰撞障碍物的时候就停下来,而且由于删除了b2Body,mario不会有任何运动,但可以试试给新建的刚体一个作用力,人为的让它运动。但是这样mario的运动效果可能不连贯。

 

2.b2Body的b2Fixture属性里面有个sensor,它的作用是:使mario可以检查到碰撞但不会发生实际的碰撞效果。可以不用销毁原来的刚体,宽高不变。

         当mario和低矮障碍物开始碰撞之前,将mario设置为sensor,即setSensor(true)。

这时,mario不会和障碍物发生实际碰撞,继续滑行直到停下来。此时根据上面的2种情况分别处理:

上面方法不行。。。。不能碰撞的话,mario会从平台上掉落。


此时根据上面的2种情况分别处理:

         情况1:给它施加一个向右的作用力(applyImpulse),让它滑出障碍物范围。

         情况2:mario使用较小刚体,和障碍物碰撞,顶破砖块。

        

0 0
原创粉丝点击