一个简单的UDP游戏涉及什么?


17

我曾经尝试在一周内用UDP编写一个简单的游戏作为一次性测试。太可怕了。

我很早就把它扔了。我遇到的主要问题是将所有玩家/敌人/物体的游戏状态恢复为旧状态,并将游戏快速移至玩家正在玩的时间点(即,跳前半秒)。让玩家错过跳跃)

也许这种方法不是最简单的方法?我怀疑是这样,但我从一开始就设计错误,并在第二天结束时意识到。(所以我没有学太多或浪费了很多时间)

对于我自己和其他人,一个简单的UDP游戏涉及什么,我该怎么写?或如何解决恢复正确状态的预测问题。

我将其标记为CW bc,我知道会有很多有用的答案。

Answers:


9

Glenn Fiedler 在这方面写了很多文章,涵盖了几乎所有的基本概念。


浮点确定性文章震惊了我。它的同步状态太糟糕了,因为我想读的是那一个。尽管浮点确定性确实回答了许多问题。

这些文章都没有深入探讨状态同步,这就是他要问的问题
BlueRaja-Danny Pflughoeft

3

自己动手可能具有教育意义,但如果可以利用现有的实现方式(或至少从那里开始),通常会做得更多。

我用两个ENETRaknet。我只在一个简单的游戏中使用过Enet,但它确实满足了我的需要。与Raknet相比,Enet使用的API级别较低。Raknet用于更大的项目。Raknet非常强大,但希望让您围绕Raknet的框架构建游戏。

Enet:

  • 连接管理
  • 排序
  • 频道
  • 可靠性
  • 碎片与重组
  • 聚合
  • 适应性
  • 可移植性
  • 自由

Raknet:

  • 对象复制
  • 自动修补程序
  • 安全连接
  • 强大的通信层(基本上,所有Enets功能都汇总在一个项目中)
  • 远程过程调用
  • 语音通讯
  • NAT穿透

对于ENet +1,我已经为客户使用了一段时间了,他们喜欢它。
Len Holgate

他正在询问状态同步-这个答案与那无关
BlueRaja-Danny Pflughoeft

-1,与BlueRaja相同的原因
乔纳森·迪金森


0

如果您像我一样去自家酿制,您将学到很多东西-也是您不想知道的东西。就像NAT遍历一样。根据caspin的说法,Enet缺少这一点,但是您总是可以找到一些在大多数情况下都可以使用的开源STUN代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.