天才一秒记住【热天中文网】地址:https://www.rtzw.net
王磊不知什么时候站到了他身后,“事件类型做key,监听者列表做value。
查找效率o(1)。”
“但2002年没有std::unordered_map,得自己实现。”
“我有现成的。”
王磊说,“以前写外掛时攒的代码库,开源链地址哈希表,经过优化,在2002年的机器上跑得飞快。”
“好,拿来用。”
王磊从他的旧硬碟里翻出代码。
確实是优化过的哈希表,用了內存池、缓存行对齐、快速哈希函数。
林浩集成进去,事件派发的性能提升了五倍。
晚上八点,战斗引擎的核心框架完成了。
能跑,但不完整。
林浩写了一个简单的测试:创建两个战斗单元,互相攻击。
屏幕上,两个像素小人你一拳我一拳,血条减少,直到一个倒下。
很原始,但基础逻辑是通的。
“接下来是网络同步。”
林浩说,“王磊,你的udp可靠传输层怎么样了?”
“搞定了。”
王磊说,“基於rudp(可靠udp),加入了前向纠错、选择性重传、流量控制。
在模擬的200毫秒延迟+5%丟包环境下,传输可靠率99.9%。”
“好,集成进来。”
集成网络层花了三个小时。
到晚上十一点,他们终於能在两台电脑之间跑起战斗demo了。
一台做服务端,一台做客户端。
客户端控制红色小人移动、攻击,服务端同步状態,另一个客户端能看到。
延迟明显,有卡顿,但能玩。
“还不够。”
林浩说,“要加预测和矫正。”
阿坤拿出了他今天的成果:三页纸的预测算法偽代码。
林浩看了,思路清晰,但实现复杂。
“我们分步来。”
林浩说,“先实现最简单的:客户端预测移动,服务端矫正位置。
技能和伤害先不做预测,等同步。”
“行。”
又写了两个小时。
凌晨一点,预测移动完成了。
测试时,故意加了300毫秒延迟。
红色小人在客户端移动得很流畅,但在服务端的视角里,它有轻微的“飘移”
,会突然跳到正確位置。
这是预测错误的矫正。
“视觉上有点怪,但能接受。”
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!