有大佬知道我这个情况怎么暂停游戏吗

当然,我更加推荐你用update自带的deltatime去自行计时,计时器或多或少会有误差,update你可以设定每帧最多多少秒就行,能完全规避同时完成多个延时器的情况,且方便后续处理

我本来的settimeout是在for循环里提前创建的,然后给一个时间,我改成schedule后,直接就每毫秒创建一个球,我写的时间是i*3,这是怎么回事呀

看着像settimeout是毫秒级,schedule是秒级,不过直接截图代码更直观一点

代码是这样的

1.如果你只想每个循环里面执行一次,要用this.scheduleOnce, 你现在是创建了25个schedule,每3秒执行1次
2.unschedule用错了,和settimeout不同,unschedule传的应该是执行的函数,比如:this.schedule(a) this.unschedule(a)

谢谢大佬解惑

我这边是去分别处理每一种列表,比如tween,spine和schedule
这样起码可以实现当我打开某个弹窗时需要暂停当前游戏状态时能够不影响该弹窗动画的同时暂停外面的功能

1赞

好的,解决了,谢谢大佬,我还有一个问题,游戏结束后我还需要倒计时15秒,这个我用的计算结束时的15秒后和现在的时间差,但是也是同样的问题,暂停时间,但这个肯定不会停,除了修改逻辑还有没有别的办法

使用缓动 也能做最后这15秒

缓动?缓动动画?

还是希望拥有举一反三的能力啊,倒计时15秒和间隔3秒不是一回事吗?

这个的倒计时是显示在界面上的,而且购买完道具后会重置,不购买道具关闭道具界面就会继续,缓动动画这个想法确实是不错,但是计时器?

之前我也是每个功能单独实现,后面做一个小游戏的时候发现状态机不只是能用于怪物、角色,整个游戏也是可以设置状态的。
比如游戏状态设置为运行,那么执行运行逻辑;游戏状态设置为暂停,那么只运行暂停的逻辑;再加上一个暂停退出状态,或者设置退出暂停的一个settimeout,可以实现倒计时15秒,并且你的逻辑会比较清晰。

像游戏里的计时或者什么的,只要是取的相对时间都首先应该用update里的dt解决,实在解决不了再考虑其他的!别想什么计时器、缓动,这些都是下下策

真不错,想法非常好 :+1:

:rofl:当你在代码里大量使用async/await做异步编程的时候,就能体会到只有update的计时是多的么苍白了。使用schedule和tween的好处就是随时可以在想要的地方暂停这么个三五秒,然后再干接下去的事。不敢想象如果全挪到update里该是什么样的代码灾难

我这边update的逻辑是统一处理的,看了一下代码我这种方式可以实现你那个需求
image image image image

使用场景比如某个弹窗打开后,游戏将处于暂停状态,但是这个弹窗有个数字跳动的效果,数字跳动是用帧函数实现的

1赞

这个能不能监听是否结束,比如说倒计时结束后执行某些逻辑

我这里的暂停是通过一个单例管理类的update,然后写了一套帧同步的逻辑,游戏战斗暂停时,通过管理类,来实现战斗移动等逻辑不再继续。感觉引擎的pause可能影响挺多,虽然用web的 setTimeout可以绕过引擎的pause影响,但感觉最好不要用puase。

当然可以啊。比如我这个数字跳动,我就是在这个帧任务的onUpdate里面去累加dt,直到目标后就执行其他逻辑