现在我正在尝试为iPhone制作mmorpg。我设置好了,以便iPhone每秒多次请求玩家位置。它是如何做到的,客户端使用异步NSURLConnection向php页面发送请求,该页面从mysql数据库加载位置并在json中返回。但是,从请求位置到实际加载时需要大约0.5秒。这看起来真的很高,有没有明显的事情可能导致这种情况?
此外,这会导致玩家在客户端上的移动也非常不稳定。是否有任何算法或方法可以减少玩家运动的波动?
答案 0 :(得分:4)
开始测量在iPhone外部运行数据库查询所需的时间。
然后测量从iPhone以外的其他东西发送相同的http请求所需的时间(例如10-15行c#程序来计算出来)。
如果以上都没有显示出任何重大延迟,则需要在iPhone方面进行改进。需要注意的一些事项:
JSON增加了很多开销。
也许你需要为你的消息提出一个紧凑的二进制格式,然后放弃HTTP以支持自定义协议 - 甚至可以恢复为UDP
以上几点通常不适用,但如果您需要提供高延迟,低带宽,片状连接的流畅体验,它们就会适用。
我没有关于玩家移动算法的任何具体信息,但经常使用的是某种移动预测。
你知道玩家移动的方向,如果速度并不总是恒定的话你可以得出速度 - 这意味着你可以随着时间插值并猜测他的新位置,在查询实际位置时调整屏幕位置,并在收到查询响应时调整回实际位置。 诀窍是始终在某些边界内插补。如果您的预测与查询返回的内容相比有点偏差,请不要立即将位置捕捉回实际位置。在少数帧上进行当前位置和所需位置之间的插值。
答案 1 :(得分:3)
在服务器端,您应该使用一些继续运行并始终保持数据库连接打开的系统。优选地,它也会缓存事物而不是始终从数据库中请求它们。
此外,不要为每次更新发出新的HTTP请求。最好不要使用HTTP,因为它实际上不适合实时通信。
GPRS通常具有600 ms的ping时间,3G具有300 ms并且HSPA具有100 ms。查看正在使用的模式。请注意,有些设备(我不知道iPhone)会因为没有足够的流量来证明更快的模式而从HSPA下降到常规3G以节省电力。
至于位置,一个相当普遍的做法是应用线性预测,即使角色在当前速度下以当前速度继续移动,即使没有来自服务器的数据可用。
最重要的是:基准/个人资料,以查看延迟的位置。它是您的服务器,网络连接还是应用程序。
答案 2 :(得分:1)
加载快速有缺点的玩家位置。
所以我没有看到mmorpg在没有必要的快捷方式的情况下工作,例如根据速度和位置推断路径。加载位置将无法以您想要的速度运行,特别是对于基于PHP的服务器而言。
无论哪种方式,在开发移动平台时,您将不得不在功能方面做出牺牲而不是全功能的桌面实施。
如果不是整个服务器用更快的语言,我也可能重新实现一些更重要的东西,例如C ++。