线性阻尼没有效果——>创建一个小球用于垂直掉落,创建一个质量为零的圆柱与小球碰撞。设置小球的LinearFactor.Y为2,而LinearDamping为0.2.
效果应该是小球在碰撞圆柱后,弹起的距离越来越短。但是不是这样,前面几次碰撞结果确实是这样,但是到了差不多5次后就越跳越高。
或许有个勉为其难的做法,就是设置LinearFacrtor.Y为1.8(最好是1.7),其表现就会很接近我们想要的效果——>就是振幅不断衰减直至速度为零。但是仔细观察,你会发现,最终的小球好像不动了,很不幸它动的幅度太小了,这一点可以参照我上传的第一个小Demo,取消我脚本中对小球tranform.position每帧log。
要怎么解这个问题?可能要自己写代码控制这个属性了。
好吧,经过本坑的不断测试,解决办法就是:设置LinearFacrtor.Y为1.6。
linearFactor 是线性速度的缩放,你一开始 y 设置成了 2,表示每帧增加的线性速度的Y方向会以 2 倍的大小进行缩放。
linearDamping 是线性阻尼,衰减线性速度,这个的作用在速度上的效果如下代码所示:
var ld = math.pow(1.0 - bi.linearDamping,dt);
var v = velocity;
v.mult(ld,v);
效果都是通过公式计算出来的,如果发现公式有什么问题,可以提 Issue ,说明具体问题,欢迎参与贡献
1赞
这个是我的源码,若有不对之处请多指教
你可以修改一下LinearDamping和LinearFactor.Y这两个数值,特别是LinearFactor.Y为1.7或者1.8,小球并没有停止运动,而在两个值之间来回变化。
如果可以,能回一下我另个帖子,关于不规则物体碰撞检测的。

如何实现小游戏《欢乐球球》中的弹弹球效果?
设置小球的LinearDamping为0,LInearFactor.Y为1.85就可以了。我不知道为什么,因为物理知识基本还给老师了。官方给的公式我没看明白,引擎源码太长不看。
若有大佬能解释一下,不胜感激。
Test(弹弹球).zip (1.1 MB)
