我正在使用Canvas和MySQL数据库在PHP中开发多人游戏。 两名球员加入比赛,他们首先得到对手的位置(X,Y和角度)。
准备就绪后,游戏开始。游戏Algorthim会这样。
每50毫秒PHP多人游戏:数据同步无法正常工作
- 计算自己的位置(X,Y)
- 获取对手的角度(AJAX),并计算出对手的POS(X2,Y2)
画布和更新然后画数据库。
context.fillStyle = "green"; context.fillRect(p1.x,p1.y, 5,5); addPoints(p1.x,p1.y); updateRoundJQ(p1.x,p1.y,p1.a); context.fillStyle = "red"; context.fillRect(x2,y2, 5,5); addPoints(x2,y2); loopTimer = setTimeout('drawLine()', 50);
但不幸的是我得到这样的结果。接收数据有很大的延迟。任何人都可以请帮助我如何摆脱这个伟大的错误?这将是非常感谢。
玩家1的屏幕
玩家2的屏幕
看来,阿贾克斯请求搞砸了整个事情。你每隔50毫秒发送一次请求!尝试提高那个时间,虽然可能不是你喜欢做的事情,但你可以试试websocket来获得这个“实时”,并特别看看socket.io库。 – Gntem
@GeoPhoenix我使用getAngle()和updateRound()函数在循环之外并将时间提高到10ms。结果比上面的要好得多。不过,角度的细微差别会产生不同的结果。 –