变大之后的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种情况分别处理:
情况1:mario仍然是sensor,给它施加一个向右的作用力(applyImpulse),让它滑出障碍物范围。
情况2:setSensor(false),这样mario就会和障碍物碰撞,顶破砖块。
上面方法不行。。。。不能碰撞的话,mario会从平台上掉落。
Box2D实现Super Mario之关键技术分析——mario下蹲通过低矮障碍物,布布扣,bubuko.com
Box2D实现Super Mario之关键技术分析——mario下蹲通过低矮障碍物
原文:http://blog.csdn.net/xuzhaojia/article/details/21302913