3

几个月前,我在 Windows Phone 上开发了一款实时快节奏射击游戏,然后我也将游戏移植到了 Windows。

现在我正在考虑让游戏支持多人游戏,但我有几个问题,因为我以前从未做过:

考虑到它是一个射击游戏,所以有很多子弹、各种类型的游戏对象、玩家/小怪的动作等......:

  • 在这种情况下使用异步套接字是否足够快?(带有 Windows 播放器的 WP 播放器或带有 WP 的 WP 或带有 Windows 的 Windows)
    • 注意:玩家将通过集中式套接字服务器进行通信
  • Windows Phone Sockets 的性能够好吗?(3G/4G, Wifi)
  • 我应该使用 TCP 还是 UDP 或两者都使用(例如,用于对象/动作的 UDP 和用于聊天的 TCP)
  • 您将如何继续发送数据,您将发送什么样的数据以及多久发送一次?

提前非常感谢!:)

4

4 回答 4

3

通常射击游戏使用 UDP 发送带有射击的数据包,而不会考虑 100% 的时间发送它们,因为有这么多数据包,无论如何如果有一些在电缆中丢失也没关系。但是为什么不先尝试 TCP,然后如果出现问题再切换到 UDP 呢?

于 2012-07-11T22:05:36.243 回答
1

一般建议是发送最少量的信息,这些信息通常倾向于用户输入而不是世界状态。

例如,在游戏进行到 142 秒时,用户 A 按下了开火按钮。在 145 秒时,用户 B 开始向左移动。

(从用户输入来看,每个客户端都有可能重新创建世界状态......通常。如果你有随机元素,那么这是在你的设计中捕捉和重新思考它们的好方法。)

至于协议选择,我建议从 HTTP 开始,然后“向下”工作。这提供了最强大的“内置”功能(例如 NAT 遍历和代理),并有望尽早突出您可能遇到的任何网络逻辑问题(例如您的预测算法是否合理接近玩家的游戏风格,以便在重新同步时'ing 确实发生在客户端上,“快速恢复”并不烦人)。

当/如果您确定 HTTP 太重/太慢,那么您可以在知道需要实现什么的情况下将其换成 UDP 之类的东西。

于 2012-07-12T01:03:44.957 回答
1

我会乞求、借用和窃取其他游戏的好点子。id Software 的 Quake 3 已经开放了网络源代码,很多人已经对其进行了剖析。当今大多数 FPS 游戏都使用 UDP 来确保及时交付时间敏感数据。丢弃的旧数据不需要新数据包。

Quake 3 使用一种策略,即最后一个已知的良好快照 ID 与来自客户端的每个数据包一起发送,而服务器在内部为每个快照发送一个 ID。此时,当客户端丢弃数据时,它会继续在其一侧发送最后一个已知的正确 ID,并且服务器会从其快照缓冲区发送一个差异。

如果您使用 TCP,您将不得不等待每个客户端确认旧数据,这将增加人为延迟,这对于第一人称射击游戏来说是无法忍受的。

于 2012-07-12T01:11:24.750 回答
0

混合:对于身份验证、登录或更改服务器/客户端信息,使用 TCP,但当大多数数据通过电缆传输时使用 UDP。由于面向连接的操作,TCP 会产生更高的延迟。

于 2012-07-17T08:03:19.147 回答