首先,我要为我的英语不好而道歉:)
昨天,我完成了使用Winsock和Allegro5用C++编写的第一个多人游戏(Pong)。游戏包含一台服务器,可为所有玩家和客户使用。
每帧(FPS = 60)客户端将其mouse_y坐标发送到服务器,服务器将它们分别传递给对手的客户端。当我在连接到其中一台服务器上的两台计算机上玩游戏时,通过本地网络,它可以完美运行,对手的球拍正在平稳移动。但是,当我通过外部IP地址进行相同的连接时,对手的球拍将滞后,这会破坏游戏,因为是客户端检查球是否击中了对手的球拍。这样,同步就被破坏了,每当我移动一个球拍在另一台计算机上弹跳球时,它就会滞后,并且不能及时为对手得分。……但这并不是游戏滞后。我的球拍和球都在平稳移动。问题仅在于对手的球拍。
我是网络编程的新手,因为我只读过Beej's Guide to Network Programming。
我使用TCP套接字发送桨的send()和recv()坐标,并使用select()函数轮询套接字以获取数据。
我不知道可能是什么原因。
TL; DR:当我通过外部IP连接时,对手的拨片滞后,但当我通过本地IP连接时却没有。
最佳答案
扩展托马斯所说的话。我要给你一些实际的答案。
如果您坚持使用TCP,请执行这些操作。
select
。连接约50次后,您会注意到huge
性能下降。对于Windows / Linux,分别使用epoll
或IOCP
。 关于c++ - 为什么在我的多人乒乓球比赛中对手的桨板滞后?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18032795/