【问题标题】:Node.js game development, client - server data exchange logicNode.js游戏开发,客户端-服务器数据交换逻辑
【发布时间】:2016-03-05 16:03:07
【问题描述】:

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

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. 我应该只向服务器发送向特定方向移动的愿望,让服务器计算下一个位置并用它更新每个人(包括我自己)吗?

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

任何帮助appriciated:)

【问题讨论】:

    标签: javascript node.js canvas


    【解决方案1】:

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

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

    如果您在这方面需要任何其他信息,请告诉我。

    【讨论】:

    • 说实话,我也想使用第二种方法。但我在想的是这个。服务器不使用requestAnimationFrame() 运行,所以我可以使用哪些功能来确保数据将在正确的时间间隔内进入以保持客户端动画流畅?据我所知,setInterval 的工作方式与 rAF 不同。或者也许我可以使用其他一些功能?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2013-08-08
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多