网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月01日漏签0天
godot吧 关注:9,750贴子:42,956
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 8回复贴,共1页
<<返回godot吧
>0< 加载中...

有谁能看懂这个定时器漂移问题?

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_GZP9CER
  • 数学算法
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
来源是我看到的一个博客You-don't-need-a-timer-node
他在里面提到了定时器的漂移问题


但我左想右想都不会累积呀,不在这帧调用,那就会在下帧调用呀,为什么会累积呢?这文章作者是不是说错了


  • 贴吧用户_GZP9CER
  • 数学算法
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
https://theduriel.github.io/Godot/You-don't-need-a-timer-node


2026-01-01 04:09:49
广告
不感兴趣
开通SVIP免广告
  • 黙轻言
  • 着色器
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
给你举个简单的例子,你的设备性能非常烂,游戏每秒只有1帧(每秒只调用一次),游戏设定角色每2.5秒自动攻击1次,计时器一般会判断目前时间是不是大于2.5秒,第二帧判定现在时间经过两秒,不攻击,由于设备太烂到第三帧时间已经经过3秒了


  • 黙轻言
  • 着色器
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后就是引擎的两种更新循环方法,第一种就是引擎处理完本次循环内容了,直接处理第二次。第二种就是开发者设定每秒1帧,本次循环引擎半秒处理完了,还没到1秒,先摸半秒鱼,到1秒再处理下一次。
又或者上一个循环的活花了1秒半,这次半秒做完,就得马上调用下一次循环把上一次慢的半秒补上


  • Dreab
  • 多线程
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为帧间也有时差,所以会有偏差,不过大多时候这个时差很小可以无视


  • timothyqiu
  • 国际化
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我觉得他这篇文章里说的几个东西都不对
开头他说想要解决每 100ms 触发的计时器在 delta 累计 99.96ms 的时候不触发的问题。这种情况本来就是符合预期的,因为 delta 指的是当前帧和上一帧的间隔。在当前帧 delta 累计得到 99.96 秒说明在这个时间点确实尚未经过 100ms,不触发才是对的。当前帧的画面反映的是这一帧开始的时间点的状态。
至于漂移问题,这篇文章里的所有代码都不存在,无论是修改前还是修改后的。漂移一般是在计时器时间到后将累计清零导致的(比如每 100ms 触发的计时器,第一帧过去 60ms、第二帧过去 60ms,此时计时器触发,如果将累计重置为 0ms 而不是保留多余的 20ms,就会导致漂移)。文章里的所有代码都是在时间到后减去时间间隔。
最后举例的游戏加速后计时器时间到少触发的问题,他所提供的代码也是不对的(文章里也说了)。严谨的做法是循环减去等待时间并触发,实际过了几段就触发几次,而不是写死在 0.5 的 delta 处检查。Godot 的 Timer 节点是没有做这一点的,每一帧永远只会触发一次,在内置文档里有提到。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回godot吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示