关于做帧同步的两个疑问。

Cocos引擎组你们好:

下面是的我两个疑问:

  1. Cocos内置的两个物理引擎,可以手动控制步进吗?从定义中可以看到是存在update函数的,还是希望引擎组能给出答案。
  2. FixedUpdate函数的实现方式。因为帧同步需要控制逻辑帧的步进次数,所以需要FixedUpdate。引擎内部是否有类似的接口?比如物理引擎的useFixedTime,如果有就不用自己实现了。

谢谢!

1.0.2 开始默认就是固定时间步长的模拟,但是是每帧执行一次

如果你想控制模拟在某帧执行,需要自己去动态开关enable,enable 为 true, 当前帧就会执行模拟

谢谢解答!如果我想在一帧內执行多次,这个可以实现吗?

这个倒是没有考虑过,非要执行多次的话,可以在 enable 的状态下,调用 PhysicsSystem.instance.postUpdate() 来执行而外的模拟

可否提供一个例子?我现在在ws里调用postUpdate会出现乱飞的现象。

将物理引擎禁用之后,只需要执行一次,就会变成这样?正确的使用方式是怎么样的?

你的是什么版本,1.0.1吗,1.0.1 上面默认用的是真实时间模拟,你禁用一段时间后再开启,会进行插值

1.0.2 默认用的是固定时间步长,这个不会插值,先升级到 1.0.2 吧,应该是这个问题

版本没问题

我在start的时候将引擎禁用了,然后程序运行过程中调用了上面的函数;
个人猜测是世界坐标没有同步到物理世界里造成的。
请问有解决方案吗?

噢噢,明白你的意思了,这个同步看来得改成事件的方式

目前只能通过改变物理绑定的节点 dirty状态,可以执行一下这个步骤 this.node.worldPosition = this.node.worldPosition;

后面会考虑改成事件的方式来同步