Javascript 如何使用NodeJS、Socket.io游戏服务器创建平滑动画

Javascript 如何使用NodeJS、Socket.io游戏服务器创建平滑动画,javascript,node.js,html,animation,socket.io,Javascript,Node.js,Html,Animation,Socket.io,我以前做过HTML5游戏,并且使用HTML5的这个特性制作了平滑的动画animate(highResTimestamp),效果非常好,可以创建平滑的动画 然而,我只制作了本地游戏。我正在制作一个在线游戏服务器并使用nodejs。我遵循一个教程,而不是使用animate(highResTimestamp)跟踪他们让nodej每隔一段时间向客户端发送一个信号以更新每个角色的位置。如下图所示 setInterval(function() { var pack = []; for(var

我以前做过HTML5游戏,并且使用HTML5的这个特性制作了平滑的动画
animate(highResTimestamp)
,效果非常好,可以创建平滑的动画

然而,我只制作了本地游戏。我正在制作一个在线游戏服务器并使用nodejs。我遵循一个教程,而不是使用
animate(highResTimestamp)
跟踪他们让nodej每隔一段时间向客户端发送一个信号以更新每个角色的位置。如下图所示

setInterval(function() {
    var pack = [];
    for(var i in SOCKET_LIST) {
        var socket = SOCKET_LIST[i];
        pack.push({
          x:socket.x,
          y:socket.y
        });
    }

    for(var i in SOCKET_LIST) {
        var socket = SOCKET_LIST[i];
        socket.emit('newPositions', pack);
    }
}, 1000/25);
我添加了一个简单的方法,可以检测键盘按键,并向服务器发送一个信号,告诉服务器增加x或y。然后,客户机正在侦听消息
newPositions
,当它收到消息时,它会清除画布并在其新位置中绘制所有字符


然而,这部作品并不流畅,感觉很前卫。有办法解决这个问题吗?有没有更好的方法来制作nodejs游戏服务器?服务器应该控制帧速率还是我应该使用
animate(highResTimestamp)
来控制帧速率?

感觉这个问题对于堆栈溢出来说可能太广泛了-需要一篇关于游戏开发的长篇论文才能真正回答。客户端和服务器之间的任何交互都不会以典型的动画帧速率运行,特别是当服务器开始为许多用户提供服务或位于远离用户的位置时。因此,动画需要从客户端运行,服务器尽可能经常地提供由其他玩家引起的更新,客户端在获得新数据时进行调整。设计“近实时多人游戏”,在负载和网络不完善的情况下运行良好是很困难的。相关: