【游戏】一款纯web集前后端为一体的沙盒游戏框架介绍

1.biomes-game是什么?

一款基于MIT协议开源沙盒 MMORPG。游戏中可建造、采集、玩迷你游戏等等,所有操作均可通过浏览器完成。它主要使用React框架,前后端用 Typescript 和 WebAssembly 编写。

2.如何本地体验?

配置:MBP M3 16G内存

要在本地运行 Biomes,需要有 64GB 内存。

(1)安装Node版本管理器(https://github.com/nvm-sh/nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
# Restart console
nvm install v20
nvm use v20

(2)安装 yarn

npm install -g yarn

(3)在克隆代码库之前安装 Git LFS,否则二进制文件将包含错误内容

// Ubuntu
sudo apt-get install git-lfs
// or MacOS
brew install git-lfs

(4)安装Python版本>=3.9,<=3.10

conda create -n biomes-game python=3.10 -y
conda activate biomes-game

(5)安装 clang 版本 >= 14

(6)安装 Bazel

npm install -g @bazel/bazelisk

(7)克隆代码库

git clone https://github.com/ill-inc/biomes-game.git & cd biomes-game

(8)运行 git lfs pull 以确保 LFS 文件是最新的

git lfs pull

(9)安装python依赖

pip install -r requirements.txt

(10)安装Redis 7.0.8

curl -s https://download.redis.io/releases/redis-7.0.8.tar.gz | tar xvz -C ${HOME} \
&& make -j`nproc` -C ${HOME}/redis-7.0.8 \
&& sudo make install -C ${HOME}/redis-7.0.8 \
&& rm -rf ${HOME}/redis-7.0.8

编译错误fix方法:https://chatgpt.com/share/34e05d01-7e61-44c2-9350-3c4669bb84dd

(11)更改配置

在biomes.config.dev.yaml添加以下内容禁用 Discord Web Hooks:

discordHooksEnabled: false

(12)启动并访问

./b data-snapshot run

访问:http://localhost:3000

3.框架是什么?

基于微服务,便于扩展。

  • 当玩家加载游戏时,他们会从 web 服务器加载客户端。

  • 然后,客户端从 asset 服务器加载资源,并与 sync 服务器建立连接以获取玩家位置本地的 ECS 数据。

  • 玩家的交互主要将 ECS 事件发送到 logic 服务器,但也可以调用 webchatoob 和 map。

  • server交互主要通过 ECS 更新转发给玩家,这些更新通过 sync 服务器同步到客户端

  • 其他服务器不是直接由玩家驱动的,但对通过 sync 服务器类似地同步的 ECS 组件进行了更改。一个例子是 newton 独立于任何玩家交互移动掉落的物品。 triggertasknewtonanimagaia 都属于该模式。

在本地运行时,您可以通过指定服务器名称来指定您感兴趣运行的服务器子集,即 ./b web trigger 。服务器将自动启动它们依赖的任何服务器以正确运行。

服务列表如下:

(1)Web​服务

  • 基于 NextJS 的 Web 服务器

  • 为所有 API 端点、主启动页面和管理站点提供服务

  • 无状态服务

(2)Logic​服务

  • 为玩家举办高级活动,通常是那些编辑地形的活动

大多数玩家事件都会通过ECS创建逻辑服务器事件。

逻辑服务器事件由 server/logic/events/all.ts 中的 ECS 事件处理程序定义

如果您打算修改或添加面向玩家的游戏交互或逻辑,这可能是开始的地方。

(3)Asset​服务

  • 只是 Web 服务器的另一个副本

  • 不同层的服务器因为运行Python而具有不同的特性

  • 生成玩家网格

(4)Trigger​服务

  • 监听 Firehose,并有一个基于时间的处理器 - 两者都是触发器的输入

  • 触发器产生游戏更新,它们:

    • 解锁食谱

    • 处理任务进展

    • 处理过期/冻结/超时

(5)Chat​服务

  • 使用分布式锁来维护单个实例

  • 将聊天消息分发到同步服务器

  • 处理聊天的发布-订阅提要以保证分发和存储

  • 围绕 DM 发布消防事件

(6)Task​服务

  • 处理长期存在的异步任务

  • 与 Firestore 交互,生成游戏事件,与加密货币交互

  • API 是间接的,您可以通过在 Firestore 中创建任务来安排任务

(7)Sync​服务​

  • 客户端的 WebSocket 接入

  • 维护整个世界的副本作为副本,将其相关部分提供给连接到它的客户端

  • 代表客户发布游戏活动

(8)OOB​服务

  • 用于直接在带外为各个实体提供服务的同步服务器的副本

  • 用于将远程数据加载到客户端

(9)Newton​服务

  • 处理掉落物、它们的物理特性以及它们何时被拾起

(10)Anima​服务

  • 处理世界上 NPC 的 AI,被分片,因此每个服务器仅处理一个子集

(11)Map​服务

  • 定期生成地图的自上而下的世界渲染

(12)Replica​服务

  • 为了消除直接影响游戏的扇出成本,任何需要世界副本的人都应订阅副本层

  • 维护世界的副本,直接订阅世界

  • 支持当前游戏API的订阅部分

(13)Gaia​服务

盖亚权威地控制着游戏中所有“自然”的游戏模拟:

  • 灯光

  • 淤泥蠕变

  • 植物生长和再生

  • 农业

(14)Redis / Redis Bridge​

  • 世界数据的主要存储,并能够在其上提供交易。

  • 组件将 Redis 中发生的更新映射到 Firehose,一次只有一个 Bridge 运行。

(15)ETCD​

  • 使用正在运行的 etcd 服务器维护分布式锁

相关推荐

  1. C++ C实现打砖块小游戏

    2024-06-13 14:52:05       29 阅读
  2. 怎么制作简单游戏?

    2024-06-13 14:52:05       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 14:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 14:52:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 14:52:05       82 阅读
  4. Python语言-面向对象

    2024-06-13 14:52:05       91 阅读

热门阅读

  1. 正则表达式30分钟入门教程

    2024-06-13 14:52:05       29 阅读
  2. MySQL数据类型

    2024-06-13 14:52:05       28 阅读
  3. C语言题目:排序问题2

    2024-06-13 14:52:05       25 阅读
  4. pytest中token的一种处理方法

    2024-06-13 14:52:05       30 阅读
  5. 算法设计与分析复习(第7章 贪心法)

    2024-06-13 14:52:05       20 阅读