特效的粒子系统也像物理子系统一样走固定更新间隔。
目前是不同帧率(30 / 60)下,粒子系统表现不一样,特别是加了旋转曲线动画模块的的,完全就是2个特效了。
现在我是自己加了一个FixedUpdateComponent,把node上所有组件的update函数替换了一个新的,里面一个循环调用原来的update,这样才让特效正常的。
粒子系统特殊处理后,针对速度快的多进行几次step:
let realTimeStep = this._fix_fixedTimeStep / this.simulationSpeed;
后面希望引擎本身能修一修
再设置里可以关闭物理更新,这样就是你手动更新了,什么帧率还不是任由你控制,不需要更换node的update
和物理更新本身无关,是游戏运行在30fps的情况下,保证特效更新在60fps上,不会出现播放异常。物理系统physics system里面就有这个累积时间机制。
可以看一下physics system下面的_fixedTimeStep使用。
对于unity来说就是FixedUpdate,就是cocos没有一个整体机制。
那Cocos中30帧你是怎么做到60帧的频率更新物理的,我上面说的也不对,关了物理自动更新后也不是可以手动任一频率更新只能再游戏帧率范围内自定义物理更新步长
看 engine\cocos\physics\framework\physics-system.ts 里面的postUpdate
while (this._subStepCount < this._maxSubSteps) {
if (this._accumulator >= this._fixedTimeStep) {
这里,会用小时间dt多跑几次step。
我就是专门做了一个组件,然后把这个机制弄到其他的组件update里面,特别是粒子系统需要这个。
postUpdate也是再mainLoop主循环里面,dt也不能小于你游戏帧率把
dt 可以小
你可以把update(dt) 拆成 update(dt/2) update(dt/2) ,调用2次,就是相当于积分那里割多一份了
哦,涨知识了,看起来这样确实是那么一回事不错的思路,不过还是感觉怪怪的