节点.js游戏开发,客户端-服务器数据交换逻辑
Node.js game development, client - server data exchange logic
我开始用javascript构建非常简单的赛车游戏。服务器由节点提供支持.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();
}
现在我正在尝试将此逻辑实现到游戏项目中,但我在理解客户端应该如何与服务器通信方面与汽车移动方面存在一点问题。
在本地,它工作得很好,因为它提供了稳定的 60 fps requestAnimationFrame()
,众所周知,它是在画布上绘制的,与屏幕刷新率同步(只要屏幕准备就绪)。
问题:
- 我
- 是否应该计算并使移动局部并将我当前坐标发送到服务器每帧(以便其他玩家可以更新我在地图上的位置)? 我
- 是否应该只向服务器发送在特定方向上移动的愿望,并让服务器计算下一个位置并用它更新每个人(包括我自己)?
我是节点js服务器游戏开发的新手,我不知道正确的方法来使其"正确"并保持此逻辑的流畅视觉效果。
任何帮助:)
我的建议是阅读有关websocket的 socket.io 和node.js配置的信息。特定游戏的所有玩家都将连接到一个插座,信息将实时传输给他们。
当任何玩家移动时,客户端将通过 WebSocket 将所需信息推送给其他玩家,然后其他客户端将相应地更新地图。
如果您在这种情况下需要任何其他信息,请告诉我。
我建议将移动到服务器的愿望推向服务器,而不是计算它在客户端。例如,这将防止您的用户通过在控制台中输入命令将他们的汽车移动到终点线来作弊。
相关文章:
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何配置分析以将数据发送到我自己的服务器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- React路由器服务器端渲染和ajax获取数据
- 在HTML页面上显示node.js服务器中的数据
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 如何在服务器上保存数据以备日后使用
- 将JSON数据从服务器加载到knockout.jsobservable中
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- Highcharts可以从服务器加载数据,但不能更新
- JQGrid使用服务器编辑后的更新数据刷新数据
- 返回之前获取数据服务器端
- 验证后 JSON 数据服务器端
- Angular E2E 测试数据:ngMockE2E 或测试数据服务器
- 如何在 Meteor 中存储特定于客户端的数据服务器端
- 在我们的数据服务器上保存谷歌地图中的gData
- 如何从服务器接收数据(服务器用java编写,到HTML文件)
- 如何发送数据服务器(JAVA编写)到客户端(Node.js编写)
- 如何访问Backbone Fetch数据服务器端
- 发布数据服务器端并在提交表单时执行javascript代码