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

问题描述 投票:0回答:2

我开始用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服务器游戏开发的新手,我不知道正确的方法使其“正确”并保持这种逻辑的平滑视觉效果。

任何帮助赞赏:)

javascript node.js canvas
2个回答
2
投票

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.