图上下文
不同的图类型是为不同的场景设计的。
在 Divooka 中,共有八种图类型(也称为图种类),分属三种上下文和一个用于定义类型的类别:
- 数据流上下文:Flows、Function、Components(原名 System)
- 过程式上下文:Events、Routine
- 声明式上下文:StateMachine、Constructs
- 类型定义:Type(原名 Struct)
| 图类型 | 上下文 | 说明 | Divooka Explore | Divooka Compute |
|---|---|---|---|---|
| Flows | 数据流 | 自由形式的画布:值沿着连线传递,一次运行会执行被标记为活动的节点及其依赖的一切。 | 创建、编辑、运行 | 创建、编辑、运行 |
| Function | 数据流 | 可被其他图像节点一样调用的图,带有一个 Input 节点和一个 Output 节点。 | 创建、编辑、运行 | 创建、编辑、运行 |
| Components | 数据流 | 以数据流定义的对象:每个没有被其他节点接收的输出都会成为该对象的一个字段,而创建一个对象就是运行这个图。 | 打开和运行 | 创建、编辑、运行 |
| Events | 过程式 | 由应用程序框架调用的回调,例如 Start 和每一帧的更新。 | 创建、编辑、运行 | 创建、编辑、运行 |
| Routine | 过程式 | 沿执行连线依次执行的步骤,包含循环和分支。 | 创建、编辑、运行 | 创建、编辑、运行 |
| StateMachine | 声明式 | 由命名的转换连接起来的状态,每个转换都由一个条件守护。 | 打开和运行 | 创建、编辑、运行 |
| Constructs | 声明式 | 由构造函数和工厂组装而成的对象树,没有副作用。 | 打开和运行 | 创建、编辑、运行 |
| Type | 类型定义 | 你自己的数据结构,包含数据成员,并以 Function 或 Routine 图作为其方法;它本身不会被运行。 | 创建、编辑 | 创建、编辑 |
Divooka Explore 可以创建 Flows、Function、Events、Routine 和 Type 图;它可以打开并运行包含 Components、StateMachine 或 Constructs 图的文档,但不提供创建这些图的选项。Divooka Compute 提供全部八种图。编辑器会在画布上方显示图的种类及其所属类别,例如 Flows · dataflow。请参阅 Divooka Explore 中的图和 Divooka Compute 中的图指南。
较旧的文档和页面可能使用以前的名称:System 即 Components,Struct 即 Type(Type 仍然可以是 Class、Struct 或 Record,在其属性中选择)。
数据流上下文与过程式上下文

了解更多:
在过程式上下文中混用数据流上下文
在过程式上下文中混用数据流节点时,必须非常小心图的状态,如下例所示:

Bigger Than 计算将被求值两次:一次由 Repeat 节点触发,另一次由 Branch 节点触发。这并不是标准化的行为,通常会产生“不确定”的结果。
声明式上下文
在声明式图中,节点描述某个事物,而不是逐步计算它。StateMachine 用命名的转换连接各个状态,每个转换都由一个条件守护:每个状态的行为本身就是一个图,一次运行会进入第一个状态、运行它,然后选取第一个条件成立的转换。Constructs 图是由构造函数和工厂组装而成的对象树,没有副作用;它是供其他图读取的描述。了解更多:声明式上下文。
模块
模块定义成员数据和成员行为。在 Divooka 中,每个图(无论是哪种类型/上下文)实际上都是一个模块。
类型
专用的 Type 图可以让你定义自己的数据类型:它的数据成员,以及作为其方法的 Function 或 Routine 图。其他图通过它的 Make 节点创建它的实例,并读取和设置它的成员。Type 本身不会被运行;逻辑请使用 Function 和 Routine 图。