为 HTML 游戏构建可演化世界地图的最有效方法

Most efficient way to build an evoluable world map for an HTML game

我有一个多人合作游戏项目,我主要关心的是游戏地图。

一点上下文

玩家与世界地图互动。这张地图是第一次预先生成。这张地图应该是基于瓦片的(每个瓦片代表世界的一部分)。然而,玩家应该有能力改变地图(在这里建造一些东西,在这里摧毁另一个东西)。地图的这些修改应该对所有其他玩家可见。

问题

执行此操作的有效方法是什么?

在我看来,要能够完全自定义我的地图,阵列解决方案似乎是完成它的简单方法。但是我没有这方面的经验。

我最近看过这个 map generator 并尝试在其上构建地图 (<map></map>),但这不允许我在生成地图后对其进行自定义。

我认为你最好的选择是:

  • 将地图数据存储在一个简单的可序列化数据结构中。例如,带有一些整数的双对象数组 - 瓷砖类型枚举、建筑类型、状态数据(如果需要)等。这将使您可以轻松地在服务器和客户端之间序列化和发送数据。

  • 使用游戏引擎/canvas渲染器/webgl渲染器通过数据数组向客户端渲染视图。我有 PIXI.js(使用 WebGL 或 Canvas 的 2D 渲染框架)和 Phaser(基于 PIXI 构建的 2D 游戏引擎)的经验。所以如果你的游戏是 2D,我可以推荐你这两个。 PIXI 仅用于渲染,其中没有游戏逻辑,您必须实现它。如果游戏不是那么复杂或者您想学习如何自己做事,那很好。另一方面,Phaser 是一个完整的游戏引擎,具有各种游戏开发功能,但这也意味着它因您可能不需要的东西而变得更加臃肿。

  • 当用户点击发送到 "user x clicked tile x,y" 服务器的内容时​​,处理输入,编辑主数据数组并将其发送回所有客户端。您可以为此使用 Web 套接字或仅使用普通 HTTP 请求

或者,您可以使用 "big" 游戏引擎之一,然后将其编译为 js 并从那里 html - Unity、Godot、Cocos creator(在这个游戏中,您实际上是用JS写的)