gpt4 book ai didi

Java MMO游戏数据传输

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:25 25 4
gpt4 key购买 nike

我正在尝试编写一个基于图 block 的小型在线游戏。我已经建立了一个游戏 - 服务器与套接字的连接,因此我可以轻松地将字符串从客户端发送到服务器,反之亦然。

我不明白的是,我应该以什么形式存储数据才能有效地传输数据?我应该使用数据对象,序列化并发送它吗?我应该将数据存储在一个长字符串中吗?还是有别的办法?

如果我要发送的数据类型很重要,那就是有关其他玩家、 map 对象等的信息。

我已经浏览了几天了,仍然没有结果(可能是因为我不确定这个问题怎么称呼)。

谢谢!

最佳答案

这里最重要的是:它是回合制游戏吗?

对于回合制游戏,您可以只使用 TCP 套接字并通过套接字传输完整的游戏状态(或基于先前游戏状态的增量)。它的编码方式并不重要。

对于实时游戏,尝试尽可能频繁地更新状态很重要。数据包是否丢失并不重要;也许另一个数据包仍在传输中,它会覆盖前一个数据包。这就是为什么您应该使用 UDP 套接字而不是 TCP。

考虑到您在谈论基于图 block 的游戏,请考虑您需要向客户传达哪些信息。也许只有玩家在移动,而其余的都是静止的?

这是一个难题,不允许单一的结论性答案。有很多设计决策需要考虑,涉及主要游戏模拟循环的设计、作弊、网络架构测试等。参见 https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking作为您面临的问题的一个小例子。

我能给你的最简单的解决方案是:

  • 使用 TCP 套接字,这样您就不必处理数据包丢失问题。
  • 当服务器上的游戏状态发生变化时,将状态传播到所有客户端。在不占用太多空间的情况下执行此操作。一个示例是按如下方式传送小数据包 ENTITY NUMBER - NEW POSITION。 (即两个 32 位整数)。当您需要一次传送多个更新时,请确保它们包含在同一个 TCP 数据包中,并且 TCP 发送缓冲区会立即在两端刷新。
  • 忘掉您在处理往返 (ping) 时间为 400 毫秒 及以上的客户端时将面临的所有时间问题。如果需要,您可以像这样转换数据包:ENTITY NUMBER - NEW POSITION - CURRENT SPEED VECTOR 这将允许客户端估计实体位置,包括滞后延迟。

关于Java MMO游戏数据传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com