命令

理解命令是理解 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));

在这里,我们从世界状态中获取 PositionMoves组件。我们还使用 ctx.origin 来检索当前实体的组件。

然后,您可以像使用其他 Cairo 结构体一样使用 positionmoves

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,更新世界状态中的 MovesPosition 组件。

emit!命令

emit!命令用于发射自定义事件。

像这样使用它:

emit !(ctx.world, Moved { address: ctx.origin, direction });