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

news2024/11/8 15:33:08

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 服务器维护分布式锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1819191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简约不简单,建筑装饰演绎现代美学

走在城市的大街小巷&#xff0c;你是否曾被那些独特而精美的建筑装饰所吸引&#xff1f;每一栋建筑都像是艺术家的杰作&#xff0c;通过精美的装饰诉说着它的故事。 我们的建筑装饰&#xff0c;不仅注重外在的美观&#xff0c;更追求内在的品质。从古典的雕花到现代的简约线条&…

干货下载 |《数据治理:数据中台建设与能力提升策略》

在当今这个信息爆炸的时代&#xff0c;数据已经成为企业最宝贵的资产之一。数据不仅能帮助企业洞察市场趋势&#xff0c;还能优化业务流程&#xff0c;提升运营效率&#xff0c;进而在激烈的市场竞争中占据优势地位。然而&#xff0c;如何有效地管理和利用这些数据&#xff0c;…

Qt篇——-1: error: fatal error: no input files问题解决

有时在pro或pri中引用的文件被删除或重命名后&#xff0c;会导致pro或pri文件中自动出现两个连续的//&#xff0c;这将导致我们编译时提示&#xff1a;-1: error: fatal error: no input files。 这是因为qmake 语法里每增加一个源文件或一个配置用一个斜杠结束&#x…

高速直线导轨驱动与控制,精准稳定的运动核心元件

直线导轨在工业生产中&#xff0c;精度和稳定性是至关重要的。而在各种机械设备中&#xff0c;高精度直线导轨是提高设备运动控制精度和平稳性的核心部件&#xff0c;当我们考虑高速运动时&#xff0c;直线导轨的精度和稳定性是非常重要的因素。 直线导轨系统中如何确保高速运动…

计算机网络 —— 运输层(四次挥手)

计算机网络 —— 运输层&#xff08;四次挥手&#xff09; 四次挥手客户端到服务器的关闭第一次挥手第二次挥手 服务器到客户端连接的关闭第三次挥手第四次挥手 等待时间的必要性 我们今天来看TCP协议的四次挥手&#xff1a; 四次挥手 TCP的四次挥手&#xff08;Four-Way Han…

TikTok网红营销指南 | 怎么找到TikTok网红并进行合作?

如果你打算在tiktok上进行营销&#xff0c;忽略与tiktok网红合作无异于错失良机&#xff0c;时尚博主Sophia仅用一条30秒的视频展示了自己从一家新兴品牌购买的连衣裙&#xff0c;视频迅速获得了数百万的点赞和评论&#xff0c;也让该品牌的销量翻了好几倍。 这种与网红合作的策…

TIM—通用定时器高级定时器

通用/高级定时器的功能 在基本定时器功能的基础上新增功能&#xff1a; 通用定时器有4个独立通道&#xff0c;且每个通道都可以用于下面功能。 &#xff08;1&#xff09;输入捕获&#xff1a;测量输入信号的周期和占空比等。 &#xff08;2&#xff09;输出比较&#xff1a;产…

在亚马逊云上部署WordPress:一个完整的LAMP环境安装教程

什么是LAMP LAMP是一个流行的开源软件堆栈&#xff0c;用于网站和网络应用程序的开发和部署。LAMP是几个主要组件的首字母缩写&#xff0c;包括&#xff1a; Linux&#xff1a;操作系统层&#xff0c;LAMP通常部署在Linux操作系统上&#xff0c;但它也可以使用其他类似Unix的…

【软件测试】遇到bug怎么分析,这篇文章值得一看

为什么定位问题如此重要&#xff1f; 可以明确一个问题是不是真的“bug” 很多时候&#xff0c;我们找到了问题的原因&#xff0c;结果发现这根本不是bug。原因明确&#xff0c;误报就会降低 多个系统交互&#xff0c;可以明确指出是哪个系统的缺陷&#xff0c;防止“踢皮球…

Kafka 负载均衡挑战及解决思路

本文转载自 Agoda Engineering&#xff0c;介绍了在实际应用中&#xff0c;如何应对 Kafka 负载均衡所遇到的各种挑战&#xff0c;并提出相应的解决思路。本文简要阐述了 Kafka 的并行性机制、常用的分区策略以及在实际操作中遇到的异构硬件、不均匀工作负载等问题。通过深入分…

ubuntu20.04设置共享文件夹

ubuntu20.04设置共享文件夹 一&#xff0c;简介二&#xff0c;操作步骤1&#xff0c;设置Windows下的共享目录2&#xff0c;挂载共享文件夹3&#xff0c;测试是否挂载成功 一&#xff0c;简介 在公司电脑上&#xff0c;使用samba设置共享文件夹&#xff0c;IT安全部门权限不通…

sql:group by和聚合函数的使用

提示&#xff1a;本文只讲解group by的简单使用和group by和聚合函数组合使用 文章目录 常用聚合函数group by明天继续更新 常用聚合函数 1.MAX&#xff1a;返回某列的最大值 2.MIN(column) 返回某列的最高值 3.COUNT(column) 返回某列的总行数 4.COUNT(*) 返回表的总行数 5.S…

Linux指令(3)

目录 1.上节复习 2.man指令 3.echo指令 4.cp指令 5.mv指令 6.重新认识 7.和文件相关的指令的辨析 8.三大重定向 9.cat指令 10.more命令和less命令 1.上节复习 &#xff08;1&#xff09;我们上次学习了这个和文件的删除以及文件夹的删除的相关的指令&#xff0c;rm …

【网络架构】Nginx

目录 一、I/O模型 1.1 Linux 的 I/O 1.2 零拷贝技术 1.3 网络IO模型 1.3.1 阻塞型 I/O 模型&#xff08;blocking IO&#xff09;​编辑 1.3.2非阻塞型 I/O 模型 (nonblocking IO)​编辑 1.3.3 多路复用 I/O 型 ( I/O multiplexing )​编辑 1.3.4 信号驱动式 I/O 模型 …

React-配置json-server

安装json-server&#xff1a;json-server工具准备后端接口服务环境_jsonserver临时后端-CSDN博客 在package.json文件中的scripts添加&#xff1a; "serve":"json-server json文件路径 --port 端口号" 在终端输入命令npm run serve&#xff0c;就可以启动…

Redis高级特性和应用:慢查询、Pipeline、事务、Lua

Redis提供了许多高级特性&#xff0c;可以帮助优化和管理系统性能。本文将介绍Redis的慢查询、Pipeline、事务和Lua脚本的使用及其相关配置。 Redis的慢查询 慢查询日志是开发和运维人员定位系统慢操作的重要工具。Redis也提供了类似的功能&#xff0c;通过记录超过预设阀值的…

Topaz Photo AI:Mac上的智能降噪专家,让每一张照片都清晰如初

Topaz Photo AI for Mac 是一款专为Mac用户打造的人工智能降噪软件&#xff0c;它在图像处理领域展现了出色的性能和创新。以下是关于这款插件的详细介绍&#xff1a; 一、卓越的降噪效果 Topaz Photo AI利用深度学习技术和复杂的机器学习算法&#xff0c;能够自动检测并修复…

蓝牙BLE上位机工具开发理论线索梳理_5.Windows WinRT API包Microsoft.Windows.SDK.Contracts

1. WinRT API包介绍 本文介绍下Windows WinRT API包&#xff08;Microsoft.Windows.SDK.Contracts&#xff09;&#xff0c; 如图1是SDK包的描述。 图1 Microsoft.Windows.SDK.Contracts Windows WinRT API包使您能够将最新的Windows运行时API支持添加到您的。net Framework 4.…

盘点|AI大模型时代,2024医疗器械网络安全应对与挑战(上)

6月5日&#xff0c;以“AI驱动安全”为主题&#xff0c;2024全球数字经济大会数字安全高层论坛&#xff0c;暨北京网络安全大会战略峰会在北京国家会议中心开幕。 与会专家指出&#xff0c;攻击者可利用人工智能技术生成网络攻击和网络钓鱼工具&#xff0c;网络安全从人人对抗、…

Vue2+Element-ui后台系统常用js方法

el-dialog弹框关闭清空form表单并清空验证 cancelDialog(diaLog, formRef) {this[diaLog] falseif (formRef) {this.$refs[formRef].resetFields()} }页面使用&#xff1a; <el-dialog :visible.sync"addSubsidyDialog.dialog" close"cancelDialog(addSub…