节点.js游戏开发,客户端-服务器数据交换逻辑

Node.js game development, client - server data exchange logic

本文关键字:数据 服务器 交换 客户端 js 游戏 开发 节点      更新时间:2023-09-26

我开始用javascript构建非常简单的赛车游戏。服务器由节点提供支持.js客户端由画布提供支持。我在当地测试想法时编写了汽车运动逻辑。我能够创建非常漂亮和流畅的运动逻辑(它首先加速直到它达到全速,然后在你不再按住键时减速):

car = {
    x: 0,
    y: 0,
    velX: 0,
    velY: 0,
    thrust: 1.2
}
if(hold_up) {
    car.velY += car.thrust;
}
if(hold_down) {
    car.velY -= car.thrust;
}
if(hold_left) {
    car.velX += car.thrust;
}
if(hold_right) {
    car.velX -= car.thrust;
}
game_loop() {
    car.velX *= 0.92;
    car.velY *= 0.90;
    car.x -= car.velX;
    car.y -= car.velY;
    draw_car();
    request_next_frame();
}

现在我正在尝试将此逻辑实现到游戏项目中,但我在理解客户端应该如何与服务器通信方面与汽车移动方面存在一点问题。

在本地,它工作得很好,因为它提供了稳定的 60 fps requestAnimationFrame(),众所周知,它是在画布上绘制的,与屏幕刷新率同步(只要屏幕准备就绪)。

问题:

  1. 是否应该计算并使移动局部并将我当前坐标发送到服务器每帧(以便其他玩家可以更新我在地图上的位置)?
  2. 是否应该只向服务器发送在特定方向上移动的愿望,并让服务器计算下一个位置并用它更新每个人(包括我自己)?

我是节点js服务器游戏开发的新手,我不知道正确的方法来使其"正确"并保持此逻辑的流畅视觉效果。

任何帮助:)

我的建议是阅读有关websocket的 socket.io 和node.js配置的信息。特定游戏的所有玩家都将连接到一个插座,信息将实时传输给他们。

当任何玩家移动时,客户端将通过 WebSocket 将所需信息推送给其他玩家,然后其他客户端将相应地更新地图。

如果您在这种情况下需要任何其他信息,请告诉我。

我建议将移动到服务器的愿望推向服务器,而不是计算它在客户端。例如,这将防止您的用户通过在控制台中输入命令将他们的汽车移动到终点线来作弊。