命令
理解命令是理解 Dojo 的关键。您将在设计系统时大量使用它们。
Dojo 中的命令是在编译时扩展的通用函数,便于系统执行。它们通过抽象常见操作(如检索或更新组件以及生成唯一 ID),为系统提供了一种与世界状态交互的便捷方式。通过利用这些命令,开发人员可以简化系统实现并提高代码的可读性。
使用命令
命令用于系统内部与世界状态的交互。它们的调用语法如下:
let (position, moves) = get!(ctx.world, ctx.origin, (Position, Moves));
get!
命令
get!
命令用于从世界状态中检索组件。
像这样使用它:
let (position, moves) = get!(ctx.world, ctx.origin, (Position, Moves));
在这里,我们从世界状态中获取 Position
和 Moves
组件。我们还使用 ctx.origin
来检索当前实体的组件。
然后,您可以像使用其他 Cairo 结构体一样使用 position
和 moves
。
set!
命令
set!
命令用于更新组件状态。
像这样使用它:
set !(ctx.world, (
Moves {
player: ctx.origin, remaining: 10
},
Position {
player: ctx.origin, x: position.x + 10, y: position.y + 10
},
));
// If the structs are already defined it can also be written as:
set!(ctx.world, (moves, position));
在这里,我们使用 ctx.origin
作为实体 ID,更新世界状态中的 Moves
和 Position
组件。
emit!
命令
emit!
命令用于发射自定义事件。
像这样使用它:
emit !(ctx.world, Moved { address: ctx.origin, direction });