我正在使用TCP进行小型多人2D XNA游戏。我的问题是,当超过2人连接时,每个人都开始出现问题。当前对于每个新的x,y位置,玩家将其作为分组发送到服务器以广播到网络上连接的每个其他玩家。这最终发送了大量的数据包,我认为这会导致我遇到的问题。
将每个x,y坐标发送给每个玩家或我做错了是不正常的?
答案 0 :(得分:0)
您应该只在玩家改变方向时,通过跳跃或向左/向右移动而不是发送每个数据包。客户端应正常处理重力和碰撞,同时服务器验证它。
移动时,发送包含以下内容的数据包:
他们的移动向量(这应该是每个轴上-1
,0
或1
的小Vector2或Point。 -1
X表示他们向左移动,0
表示没有移动,1
表示正确移动)
如果你没有,你应该已经实现了这个客户端(不要只是在移动时将X添加到速度,将其分配给运动变量以便以后使用。
前:
if (KeyState.IsKeyDown(Keys.Left) { Movement.X = -1 }
...
Velocity += Movement * Speed
他们当前的位置。将玩家当前位置(服务器端和经过验证的位置)发送给所有其他玩家,以确保他们的位置匹配(由于小的变化可能会关闭)
他们当前的速度。当运动发生变化时,玩家的速度应该会发生变化,因为他们现在正朝着不同的方向前进。发送速度和位置。
总的来说,只有当玩家移动时(例如:停止按住左键或按下跳跃键)而不是每一帧,发送movement
(基于键盘输入的方向),{{1 }和position
。
完成此操作后,您可能需要添加插值,这将平滑更新之间的移动并使其看起来不那么生涩。