javascript - 如何在带有客户端渲染器的服务器上使用 Matter.js

标签 javascript websocket matter.js

我正在编写一款多人游戏。有没有在服务器上使用 MatterJS 的快速方法(使用 nodejswsexpress)。我的主要问题是将世界从服务器发送到客户端以在 Canvas 上渲染它。世道艰难,有没有办法在前端使用内置的Matter.Engine
谁能帮忙?


如果这个问题有点不详细,请在评论中写问题。

最佳答案

理想情况下,对于权威服务器游戏,您希望引擎在服务器端运行,渲染器在客户端运行。 Matter.js 有单独的引擎和渲染对象,这很有帮助。

您可以采用以下几种方法:

  1. 为服务器端编写您自己的渲染器,它通过 websocket 连接发送更新而不是渲染到屏幕。为客户端编写您自己的引擎对象,它从服务器接收 websocket 更新以更新对象位置、 Angular 等以传递给真正的渲染器。然后,在服务器上,您将运行默认的 Matter.js 引擎,但使用您的自定义渲染器,在客户端上,您将使用默认的 Matter.js 渲染器,但使用您的自定义引擎。如果您想采用这种方法,Matter.js 文档将是一个好的开始。

  2. 或者,在客户端和服务器上运行默认引擎,但在客户端,将对象设置为静态。不要在服务器端将它们设置为静态。然后,服务器可以通过套接字发送更新,包括对象 ID、位置和 Angular 。然后客户端可以调用这样的代码来更新客户端引擎:

Matter.Body.setPosition(body, update.position);
Matter.Body.setAngle(body, update.angle); 

方法 #1 需要更多的努力才能开始工作,因为您需要编写客户渲染器和引擎组件,但方法 #2 工作得相当好,可以快速开始工作。要记住的一件事是,在多人在线游戏中,延迟成为一个挑战。在这种情况下,让引擎在客户端和服务器上运行可能是一个优势,因为理论上您可以乐观地在客户端应用力/位置,然后在服务器发送下一批更新后“调整”这些更新.

除此之外,该架构看起来很像任何其他客户端/服务器游戏架构。

请注意,Matter.js 可以在 Node 环境中与 NPM 一起安装——它不必在浏览器中运行。您可以轻松地将其与 Express.js、ws 或 socket.io 连接起来,然后启动一个循环,您可以在其中调用这样的代码来定期更新引擎:

Matter.Engine.update(engine, 1000 / 60);

希望对您有所帮助。

关于javascript - 如何在带有客户端渲染器的服务器上使用 Matter.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211642/

相关文章:

javascript - 使用 C# 将 JSON 代码导入 Javascript 文件

javascript - 在 Javascript 中解析友好的 URL

c - 在 Meteor Server 和 C app 之间建立 DDP 连接

python - 使用 websocket - Python 从 h.264 视频流中捕获第一张图像

javascript - 如何在 Matter.js 中启用碰撞?

physics - 如何防止 [circle] body 滑入静态 body 之间的 0px 间隙

javascript - 将参数传递给函数导出 Node

javascript - react native : Customizing TouchableOpacity Animation Speed

java - 如何在 Java 中实现 WebSocket 服务器?

javascript - Matter.js:在 Canvas 上放置文本或图像