我正在使用Canvas和MySQL数据库在PHP中开发多人游戏。
两名球员加入比赛,他们首先获得对手的位置(X,Y和角度)。
当他们准备好了,游戏开始了。游戏Algorthim是这样的。
每50毫升
然后在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的屏幕
答案 0 :(得分:4)
您的脚本没有每隔50ms运行一次 - 因为只有在所有其他功能运行后才设置超时。根据{{1}}的工作方式,这可以为每个时间间隔添加往返时间。
例如,请考虑以下时间:
updateRound
因此,使用这些示例时序,您的循环将仅在~306ms之后运行。
可能值得考虑使用websockets将数据推送到客户端,而不是使用AJAX将其拉出来。
答案 1 :(得分:1)
我终于使用 Node.JS 和 Socket.IO 找到了解决方案。 解决方案比AJAX简单得多。
//Client Side Request
function sendMyPoints(){
socket.emit('myPoints',p1.x,p1.y);
}
//Server Handles the Request
socket.on('myPoints',function(xP, yP){
socket.broadcast.emit('getOppPoints',xP,yP);
});
//Client gets the Response
socket.on('getOppPoints',function(xPos,yPos){
drawOppPoints(xPos, yPos);
});
感谢您推荐Websocket。太棒了。