我正在创建一个2d的Minecraft风格游戏,其中地图存储在2维int数组中。 你可以放置和销毁块,并且ai控制的角色将在地图上走动。 游戏使用xna / c#制作。 问题是我没有多少编写网络游戏的经验。
我应该使用哪种协议? UDP,TCP?或者也许是lidgren图书馆? (使用UDP +可靠性)
我是否应该在客户端,服务器或两者上进行以下操作?
此外,将destroy和place-block消息发送到服务器是否是一种好习惯? 我想当客户端启动时,首先需要下载地图。然后对地图的更改将与客户端上的地图和服务器上的地图进行并行处理....
最后,我应该只在他们改变(趋向于TCP)时才广播角色的位置,还是应该不断发送它们(趋向于UDP)?
任何帮助都很有用:)
提前致谢。
PS:抱歉我的英语质量差(我荷兰人)答案 0 :(得分:2)
我觉得好像下面的帖子有一些对你有用的好信息。就像AmitApollo所说的那样,简而言之,UDP更快,但不太可靠。如果您通过此网络发送的所有信息绝对至关重要,那么TCP可能是最佳实施方案。你总是可以尝试两种方式,看看你有什么样的性能/延迟命中率。一般来说,我读过的大多数快节奏/实时游戏都使用了UDP。
答案 1 :(得分:0)
所有内容都应该由服务器验证,以便游戏不可破解或可修改;通过修改内存地址或其他一些漏洞。
AI / pathfinding和collision都应该由服务器验证,但是由于握手和窗口开销,使用TCP会导致拥塞。 MMO今天使用具有自定义拥塞控制和握手的UDP数据包。作为第一个版本,您应该只使用UDP数据包 - 当数据包在传输中丢失或丢失时,游戏将只是lag
并冻结,直到UDP数据包通过。游戏的后续版本可以使用UDP实现自定义确认设置,以便角色将暂停直到验证。
Client -- Movement request UDP --> Server
Client: Character is frozen Server: Validate coordinates on map
Client: <-- YES or NO to move request -- Server
Client: Move character based on response
这确保了角色的每次移动都是有效的。您还需要安全密钥或协议安全性,这样不仅任何人都可以发送要验证的坐标。
您可能认为此设计会落后于您的游戏,但如果设计得当,它将是安全的,并且不受客户端黑客攻击。请记住将UDP数据包设计得尽可能小(大小)。