作者:Magicblock;来源:MetaCat BOLT v0.1 已于 2024 年 3 月 5 日上线。BOLT 是一个链上开发框架,它简化了无需许可、可组合性且可以永久存在于区块链上的游戏的开发。BOLT 的设计包括一个与 SVM 兼容的加速层,使全链上游戏的性能与传统多人游戏服务器相当,同时又不影响 Solana 全局状态的可组合性。在当前这个早期版本中,我们将介绍 BOLT CLI 和实体组件系统 (ECS),介绍最近的更新并展示如何在 Solana 上开发简单的链上游戏。 ECS 模式虽然 Bolt 不仅仅是一个实体组件系统 (ECS) 框架,但我们鼓励使用这种强大的设计模式来增强可组合性。ECS 是一种组织代码和数据的方式,以实现模块化和可扩展的游戏,这是我们在全链上构建时寻求的关键功能。顾名思义,ECS 中有:
这种关注点分离(separation of concerns)实现了高度灵活的模块化架构。你可以下面的链接中查看 ECS 模式的所有优点? https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-ecs. BOLT CLI BOLT CLI 是 Anchor 框架的扩展。它包括流行的 Solana 开发框架的所有功能,以及用于创建世界实例( world instances)、组件(components)和系统(systems)的功能超集。 安装 BOLT CLI
你可以通过以下方式验证 BOLT CLI 的安装:
初始化基于 BOLT 的项目请运行:
组件(Components)文件夹中的示例
# [component] 宏负责处理所有 Solana 底层特定行为。除了定义数据结构之外,你不必了解帐户如何工作、如何分配字节或任何其他内容。 组件本身就是部署在链上的程序。
id 定义了 Position 上面组件的唯一地址。 系统(Systems)系统(Systems)包含操作组件(Components)的逻辑。系统通常将在具有一组特定组件的所有实体上运行。该
每个系统(Systems)都实现一条执行指令,该指令负责将系统逻辑应用到任意数量的组件上。 用 #[system_input] 宏标记的结构,指定系统将接收作为输入的组件包。 执行指令返回修改后的组件,World Program 在检查权限和业务逻辑后,将其更新在数据结构中。 同样,你无需通过定义 CPI、检索 IDL 或其他任何内容来关注底层区块链层。只需定义你希望系统(Systems)运行的组件包(the bundle of components)即可! 将所有东西与 World Program 结合在一起 现在我们已经掌握了组件(components)和系统(Systems)的运行方式,接下来让我们使用 TypeScript SDK 中的 World Program 创建一个游戏实例。World Program 是创建世界实例、实体、附加组件和执行系统的入口点。SDK 提供了与BOLT交互的便捷接口和方法。 安装要安装 Bolt sdk,请运行以下命令:
创建一个世界实例(world instance)
添加新实体(entity)
将 Position 组件附加到实体
在位置组件上执行运动系统
在这个简单的示例中,我们创建了一个实体 Player,它包含具有 x、y、z 坐标的 Position 组件。我们可以执行运动系统来改变它的状态。这是最好的部分,通过使用 BOLT ECS 定义你的游戏数据结构,你不仅能够重用现有的系统和组件,而且还可以轻松地允许对游戏进行修改或扩展。让我们考虑一个稍微复杂的运动动力学,其中一个改变位置的速度组件定义为:
有人可能想引入新的能力来加快移动速度。他们只需添加一个使用 Velocity 作用于 Position 组件的新系统即可做到这一点。 #[system]pub mod system_apply_velocity { pub fn execute(ctx: Context<Components>, _args: Vec<u8>) -> Result<Components> { ctx.accounts.position.x += ctx.accounts.velocity.x; Ok(ctx.accounts) } #[system_input] pub struct Components { pub position: Position, pub velocity: Velocity, }} 请注意这段代码是多么简单。这个新系统将位置和速度组件作为输入,并定义加电的逻辑。没有 Solana 帐户或 CPI 的概念,代理World 程序正在处理这里的一切。 通过几行代码和几乎不需要任何区块链知识,我们刚刚引入了一种新的游戏行为! 总结BOLT 利用 ECS 模式,使游戏开发人员能够创建高度模块化、高效且可组合的游戏。实体充当组件、原始数据结构的容器,允许动态定制而不改变底层代码库。系统与这些组件交互,将逻辑和行为注入游戏实体。这种关注点分离不仅简化了开发过程,而且使游戏逻辑更加可重用,并增强了在发布后以无需许可的方式扩展和修改游戏的能力。 |