前言:
前天给游戏里面增加了一个 sensor 类型的fixture,
这个 fixture 主要用来处理碰撞,说的具体一点,用来处理浮力。
不知道别人是怎么做浮力的,我之前也没什么经验,又一次在和伙计讨论爆炸效果的时候,
伙计对 box2d sensor 的代码稍作改动,粗略的实现了爆炸的效果。
当时我觉得这个效果应该会有用到的地方,便留下了一点儿印象。
后来做水浮力的时候,我想到水浮力也不就和爆炸差不多么,
只不过前者由圆心向外辐散,而后者则是对感知到的物体施加一个持续向上的力。
说干就干,后来一看效果,还不错。
不过还是遇到了一些问题,诸如:
小密度的物体应该是要比较淡定的漂浮在水面上的,
但这种实现达到的效果却是——小密度物体上下抖个不停。
还有就是,为了真实的让玩家感受到水是具有阻力的,
我特意在物体刚接触水面时将物体的线速度,角速度都做了比较大幅度的削减。
如果按照物理知识来做的话,物体进入水中的时候,
如果重力与浮力相等或者是大于浮力,依然会以加速度下沉。
就不多说什么了,有时候为了效果逼真,反而要去违背实际物理情景。
回到正题
话说这里遇到了一个bug:
就是在刚刚进入游戏的时候,竟然发现物体落水的时候没有速度骤减的效果,
之前由于在做别的效果,也没太留心。
今天早上起床之后又遇到了这个问题,于是便决定专心将这个bug干掉。
这次我打开了box2d的 debugDraw,过不其然,debugDraw 一打开,这个bug便再经不起推敲。
何出此言?因为我发现某些刚进入关卡的时候,场景底部的 sensor fixture 竟然都不存在。
具体来说,某些时候应该是指刚打开游戏的时候。
一旦完成这第一次关卡加载,重来、上一关或下一关一下,立即发现 sensor fixture 正常的出现在了场景底部。
值得注意的是,浮力感知 sensor fixture 的宽度大小是基于地图的宽度大小的。
我的第一个猜测便是,可能在地图的宽度大小数据还未加载进来的时候,便完成了 sensor fixture 的创建。
这样, sensor fixture 拿到的地图的宽度大小肯定是一个未初始化的值,
如果这个值是0,那么便能很好的解释上面出现的现象。
至于为什么“重来”、“下一关”或“上一关”之后,能正常取得地图宽度大小。
那是因为,我将地图的尺寸保存到了单例里面,在第二次以及之后那地图宽度数据的时候,是能正常拿到的。
有了想法回到项目里面一看,果然如我所料。
very good,bug 被成功干掉!