html 所有玩家使用相同的画布动画[已关闭]

mmvthczy  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(124)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

3天前关闭。
Improve this question
我在我的在线游戏中使用canvas。所有数据都是按客户端考虑的,在一个玩家移动之后,最终状态在房间中的所有客户端之间同步。然而,在一个回合中,动画可以播放不同。我使用了requestAnimationFrame,但在update函数中,经过的时间也被考虑在内,我在计算时依赖它。2帧仍然不同。3我的游戏对即使是最轻微的偏差也非常敏感,所以动画必须完全一样。这怎么能实现呢?或者至少接近我想要的?
有很多动画库。在它们里面,动画总是一样的,它们是怎么做到的?

sdnqo3pr

sdnqo3pr1#

我不是Maven,但我认为这取决于你如何计算框架。
想象一个只会跳跃的游戏,跳跃在2秒内完成,想象两个玩家[1, 2]同时跳跃,你只为用户1发送:

{ user: 2, action: "jump" }

并且有0.5 sec的延迟所以他会看到2号参与人的跳跃在2. 5秒内结束。
也许你可以添加一个时间戳来真实的计算位置,即使他有一个连接延迟。另一种选择是将该逻辑发送到服务器,服务器发送对象的坐标,并更新每个用户PC上的状态:

{ user: 2, x: 2, y: 0.0, time: "2023-02-06T22:24:42.000Z" },
{ user: 2, x: 2, y: 0.2, time: "2023-02-06T22:24:42.500Z" },
{ user: 2, x: 2, y: 0.4, time: "2023-02-06T22:24:43.000Z" },
{ user: 2, x: 2, y: 0.2, time: "2023-02-06T22:24:43.500Z" },

所以,你重画画布,总是呈现最后一个坐标点。
也许你可以使用这两种技术,在服务器上更新对象的状态(比如玩家的位置),在PC上更新状态(比如枪声)。
另一个技巧是使用一个工人来更新画布,使其更快,不要阻止主要威胁(https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas

相关问题