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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js游戏开发,客户端 - 服务器数据交换逻辑相关的知识,希望对你有一定的参考价值。

我开始用javascript构建非常简单的赛车游戏。服务器由node.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();
}

现在我正在尝试将这个逻辑实现到游戏项目中,但我在理解客户端应该如何与汽车的运动方面进行通信时遇到一些问题。

在本地,它工作得非常好,因为requestAnimationFrame()可以提供稳定的60 fps,而且众所周知,它在画布上绘制,与屏幕刷新率同步(每当屏幕准备就绪时)。

问题:

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

我是节点js服务器游戏开发的新手,我不知道正确的方法使其“正确”并保持这种逻辑的平滑视觉效果。

任何帮助赞赏:)

答案

我的建议是关于websocket的socket.ionode.js配置。特定游戏的所有玩家将连接到一个套接字,并且信息将实时传输给他们。

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

如果您在此上下文中需要任何其他信息,请与我们联系。

另一答案

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

以上是关于Node.js游戏开发,客户端 - 服务器数据交换逻辑的主要内容,如果未能解决你的问题,请参考以下文章

用于实时多人游戏的 Node.js UDP

使用 Telnet 的 Node.js 客户端和服务器游戏

Node.js:如何交换 JSON 对象 [重复]

node.js实现WebSocket

Node.js Web 套接字服务器:我的数据管理想法是不是稳定/可扩展?

node.js内存泄露问题记录