求助:如何暂停运行中的刚体小球,然后还能恢复

最近在做一个游戏,场景是有许多弹起碰撞的小球,需要某个状态下暂停小球的运动,然后还能恢复运行,小球会接着暂停时的状态继续运动(保持暂停前的受力状态)。如果采用director的pause方法的话,游戏会全局暂停,其他控件的update会停止执行,我现在如果只想暂停小球的话应该怎么处理呢?

timescale = 0

你好,可否详细说一下,这个方法是哪里调用的?

自己顶一下

我的小游戏也有这样的需求,我没有用系统的物理引擎,自己写的小球运动,简单说下我的做法吧,小球的update里有这样的一个公式:小球的位移 = 速度时间timeScale,小球运动中timeScale = 1,如果你想暂停小球运动,timeScale置为0,小球的位移为0了,不就暂停了嘛,再置回1不就又按照之前的轨迹继续运动了嘛。更好点的写法是,有个ballManager这样的类去统一管理所有球球,让ballManger去调用小球的接口更新小球的运动,而不是把运动公式写在小球的update里。系统的物理引擎一样的道理,肯定也有能设置timeScale的地方,你找找

我用的方案比较笨,用一个成员变量存储小球的动量。
小球停止:
this.linearVelocity = this.rigidBody.linearVelocity;
this.rigidBody.type = 0;

小球恢复运动:
this.rigidBody.linearVelocity = this.linearVelocity;
this.rigidBody.type = 2;

1赞

只要一个参数就可以了,就看你怎么循环了,类似while(true){ if(active) do something }, 只要控制这个active就可以了

把物理关掉最省事

多谢,这个方案不错

这个不行,再打开得时候,小球之前的速度和运动状态都丢失了,另外我仅仅是暂停小球运动,但是碰撞检测仍然需要生效

现在问题关键是没有找到能符合我需求的“do something”这里是如何暂停的,比如你这个例子,active是暂停状态了,do something如何让刚体小球停止运动?

多谢,但是我这个小球的运动和碰撞反弹需要符合物理世界,所以不用物理引擎来模拟的话会比较麻烦。

这个方案可行,但是不知道为啥我这里偶尔会出现bug,小球的碰撞检测会一定概率出现失效。

如果想停止所有运动,可以直接cc.director.getPhsycsManager().enabled = false;

我也遇见同样问题,请问问题解决了吗