【发布时间】:2013-01-19 22:38:44
【问题描述】:
我正在使用 Canvas 和 MySQL 数据库在 PHP 中开发多人游戏。
两名玩家加入游戏,他们首先获得对手的位置(X,Y 和角度)。
当他们准备好时,游戏开始。游戏算法是这样的。
每 50 毫秒
- 计算自己的位置(X,Y)
- 获取对手的角度(AJAX)并计算对手的位置(X2,Y2)
-
然后在 Canvas 上绘制并更新数据库。
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 的屏幕
【问题讨论】:
-
似乎 ajax 请求搞砸了整个事情。您每 50 毫秒发送一次请求!尝试提高那个时间,虽然可能不是你喜欢做的事情,你可以尝试 websockets 来获得“实时”,特别是看看 socket.io 库
-
@GeoPhoenix 我将 getAngle() 和 updateRound() 函数放在循环之外,并将时间提高到 10 毫秒。结果比上面的要好很多。然而,角度的微小差异会产生不同的结果。
标签: php ajax canvas multiplayer