settimeout跟schedule,大家在用哪个?

最近使用schedule做计时器,发现切换后台,计时器就不继续执行了,
切回来才继续执行,这时候游戏已经不同步,导致UI错乱,
而使用sittimeout在切换后台时,计时依然在继续执行,
看了一些帖子,官方给的建议是切换前后台的时候前后端做一个时间上的同步,
我觉得这简直不合理,如果这个游戏是个单机呢?
所以我觉得暂时使用settimeout比较好,虽然没有schedule好用,但是不会出一些古怪的问题
大家都在用什么做计时器呢?
或者有没有大神自己写了一个好用的计时器可以分享一下呢?

1赞

settimeout和schedule都有各自的问题,都用,便于取舍。以前我只用settimeout,但是settimeout是占用主线程的,太多容易导致游戏卡顿。schedule我这边用项目测试并没有你说的导致UI错乱(理论上讲,调到后台,游戏也会停止。可能因为你的游戏逻辑有用到settimeout去执行?才导致的游戏不同步?)。个人觉得主要是看主线程与多线程的取舍和是否依靠节点使用(比如schedule是跟节点执行的,当节点被删除,scheudle也会被删除,节点active为false,schedule也不会执行,直到active为true为止)。

2赞

厉害了,settimeout需要手动回收,也是一个问题

为什么 我使用setTimeout做跟服务器的心跳,一旦APP切后台,setTimeout就停止了,知道切回前台才会生效

我这边schedule也没有遇到ui错乱的问题

schedule切到后台会暂停,切回前台会接着执行,而此时游戏进程已经往前走了,需要断线重连恢复UI

schedule会暂停setTimeout不会暂停

setTimeOut? setInterval ?

我们之前的做法是客户端的时间 每次收到服务器协议的时候,都会做一次时间同步,这样客户端取到的就是服务器时间,也就不会出现你这个问题了

你这样所有消息都带上了服务器的时间戳,感觉有点浪费啊。还不如客户端定期跟服务器请求一下时间戳。
另外settimeout切到后台真的可以执行么

真的,很可怕的