2016-03-05 44 views
0

我开始用javascript构建非常简单的赛车游戏。服务器由node.js和客户端通过画布提供动力。我在测试本地的想法时编写了一个汽车运动逻辑。我能够创造非常好的,平稳的运动逻辑(直到它得到全速,然后当你不保持键减慢它首先加速了):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它工作得非常好,因为它提供了稳定的60 fps的requestAnimationFrame(),正如我们都知道的那样,它在画布上同步刷新率(每当屏幕准备就绪时)。

问题:

  1. 我应该怎么计算,使招localy并发送至服务器我的当前坐标每帧(这样,其他玩家可以更新我在地图上的位置)?
  2. 我应该向服务器发送一个特定方向的动作,让服务器计算下一个位置并更新每个人(包括我自己)吗?

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

任何帮助appriciated :)

回答

2

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

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

请让我知道你是否需要在这方面的任何其他信息。

+0

说实话我想用第二种方法。但我在想这是什么。服务器不会使用'requestAnimationFrame()'操作,那么我可以使用哪些功能来确保数据以正确的间隔进入以保持客户端动画的流畅?从我注意到的来看,setInterval的工作方式与RAF不同。或者也许还有一些其他功能可以使用? – Mevia

1

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