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

时间:2016-03-05 16:03:08

标签: javascript node.js canvas

我开始用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();
}

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

Localy它的效果非常好requestAnimationFrame()提供了稳定的60 fps,而众所周知,它在画布上绘制,与屏幕刷新率同步(每当屏幕准备就绪时)。

问题:

  1. 我应该计算并移动localy并每帧向服务器发送当前坐标(这样其他玩家可以更新我在地图上的位置)?
  2. 我是否应该向服务器发送仅在特定方向上移动的愿望,让服务器计算下一个位置并用它来更新所有人(包括我自己)?
  3. 我是节点js服务器游戏开发的新手,我不知道正确的方法来做到这一点"正确"并保持这种逻辑的平滑视觉效果。

    任何帮助appriciated:)

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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