实时socket.io Pong游戏更快

时间:2016-03-23 04:57:57

标签: node.js socket.io real-time pong

我刚刚使用node.js和socket.io为后端实现游戏Pong,使用jQuery用于客户端。我将游戏放在我的免费层AWS实例上,并且机制工作正常,但延迟无法播放。在游戏中,控制它的玩家的桨在本地移动。客户端还发送服务器请求,该请求每隔requestFrameAnimation向对手广播划桨移动。为了发射球,发球的球员按空格键发送服务器请求,然后发送给两个玩家以开始球运动。

桨板运动和球发射都受到延迟的影响。对于拨片,我认为问题是我每隔requestFrameAnimation发送一次服务器请求,这可能是速度快的。也许我应该制作一个setInterval,在每一秒钟内将玩家的桨位置发送给对手。至于球,由于它开始移动的信号是由服务器发送的,我认为我需要发送一个实际的时间让球在按下空格键之前启动,这样每台本地机器可以倒数到那个时间

以下是我的客户端代码的剪辑:

function updateFrame(){
    paddleSpeed = 0;
    if (keysPressed.up){  // Move paddle up
        if (!(myPaddle.offset().top <= arena.offset().top)){  // Make sure paddle isn't at top 
            paddleSpeed -= 8;
        }
    }
    if (keysPressed.down) {  // Move paddle down
        if (!(myPaddle.offset().top+paddleL.height() >= arena.offset().top + arena.height())){  // Make sure paddle isn't at bottom
            paddleSpeed += 8;
        }
    }
    if (paddleSpeed != 0) socket.emit("moveReq", paddleSpeed);   // Send server request to be sent to opponent
    myPaddle.css({top: '+='+paddleSpeed+'px'});   // Move paddle locally
    if (gameInProgress){   // If round has started, move the ball
        ball.css({left: '+='+ballSpeed.hor+'px', top: '+='+ballSpeed.ver+'px'});
        window.requestAnimationFrame(updateFrame);  // Request next frame

和我的服务器端:

socket.on('moveReq', function(data){
    socket.broadcast.emit("movePaddle", data);  // Send opponent's paddle movement to user
});

socket.on('launchGame', function(){   // Launch the game
    io.sockets.emit('startGame');
});

有没有人提出减少游戏延迟的提示,或者这种网络应用程序的带宽是否过低?

1 个答案:

答案 0 :(得分:1)

应该有足够的带宽来轻松运行这个游戏,所以我认为这不是你的问题。

相反,我建议您查看有关在线游戏开发的this博客。当我开始开发多人游戏时,我自己使用了那里描述的想法。它解释了开发在线游戏时的几个关键问题和解决方案。