2011-04-29 112 views
4

最近我一直在研究一个多人联网应用程序。我已经使用Bonjour服务和NSStream对象成功实现了客户端服务器模型。双向沟通已成功完成。多人联网游戏中的同步?

我面临的问题是:运行应用程序的两个设备通过本地wifi连接。将消息从客户端发送到服务器时存在延迟问题,反之亦然。

描述简要:

  • 这是一个赛车游戏,最多两个玩家。
  • 一台服务器和其他客户端。
  • 当客户端按下按钮时,一个特定的消息被发送到服务器,告诉服务器哪个键或按钮被按下。然后,服务器作出相应的响应,并在服务器本身上对客户的汽车进行更改。这些变化并不总是相同的。客户端屏幕上的汽车的实际位置与服务器屏幕上的汽车的实际位置总是存在差异。

任何想法?

+0

也许代替将按键发送到服务器,您应该只将汽车的状态发送到服务器。像速度,x,y,z位置。这样在客户端机器上就不会出现延迟,但服务器和客户端之间可能存在不一致。 – netbrain 2011-04-29 13:25:54

+1

[处理网络游戏中的延迟]可能的重复(http://stackoverflow.com/questions/42515/dealing-with-latency-in-networked-games) – 2011-04-29 13:25:55

+6

@netbrain - oh亲爱的上帝没有。规则#1 *永远不要相信客户* – 2011-04-29 13:26:47

回答

9

欢迎来到网络世界。 :)

这些是游戏网络编程的经典难点。有很多不同的技术来克服这些问题。

这个博客有很好的信息,可能会帮助你。

http://gafferongames.com/networking-for-game-programmers/

你可能会在这篇文章中特别感兴趣:

http://www.gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking

祝你好运!

+0

我刚刚签出了评论,布赖恩罗奇包括您的问题与[在网络游戏中处理延迟]链接(http://stackoverflow.com/questions/42515/dealing-with-latency-in-networked - 游戏),并给出了答案之一有一篇关于Source引擎如何处理这些问题的文章。这是一个很棒的阅读!你应该检查出这个问题。 – KTF 2011-04-29 13:59:31

+0

@All:谢谢你带领我走向正确的方向....我在想我可以发送客户端键输入到服务器和服务器作为回报发送物理和所有更新的数据到客户端,然后客户端使用该数据更新其绘图....这是正确的方式..? ? – Tornado 2011-05-11 13:13:57

+0

是的,知道 - 现在最大的区别(与Quake乞讨)是客户端会在等待服务器返回用户输入更新的同时做出“受过教育的猜测”......这里有插值和精彩(读:复杂)的东西这样才能让这个过程顺利进行。无论如何 - 这些都在提供的链接中。我建议你阅读这些。 – KTF 2011-05-12 19:14:17