首先,我想为我糟糕的英语道歉 :) 昨天我使用 Winsock 和 Allegro5 用 C++ 完成了我的第一个多人游戏(Pong)。游戏由一台服务器组成,供所有玩家和客户端使用。
每帧 (FPS = 60) 客户端将他们的 mouse_y 坐标发送到服务器,服务器分别将它们传递给对手的客户端。当我在连接到其中一台服务器的两台计算机上玩游戏时,通过本地网络它运行良好,对手的桨移动顺利。但是当我通过我的外部 IP 地址进行相同的连接时,对手的球拍滞后,这会破坏游戏,因为它是客户端检查球是否击中对手的球拍。因此,同步被破坏了,每当我在另一台计算机上移动一个桨来反弹球时,它就会滞后并且没有及时完成,从而导致对手得分......但这不是滞后的游戏。我的桨和球移动得很顺畅。问题仅在于对手的桨。
我是网络编程的新手,因为我只阅读了Beej 的网络编程指南。我使用 TCP 套接字来 send() 和 recv() 桨坐标,并使用 select() 函数来轮询套接字以获取数据。
我不知道可能是什么原因。
TL;DR:当我通过外部 IP 连接时,对手的拨片滞后,但当我通过本地 IP 连接时则没有。