简体中文
English 简体中文 繁體中文
Methodox 首页

图和成员

一个文档包含一个或多个图,列在左侧的文档大纲中:文档自身的图 Document,以及位于其下的其他图。每个图都有一个种类,它决定图的绘制方式、提供哪些节点以及运行意味着什么。画布上方会显示种类及其所属的类别,例如 Flows · dataflow、Routine · procedural。其中,dataflow(数据流)表示值沿连线流动,节点在需要其结果时运行;procedural(过程式)表示各步骤依次运行;definition(定义)表示描述一个类型,而不是运行。

图的种类

种类 类别 说明
Flows dataflow 一块自由形式的画布。值沿连线传递,运行时执行标记为激活的节点及其依赖的所有内容。它是日常用于探索和组装的工作区。
Function dataflow 其他图可以像调用节点一样调用的图:有一个 Input 节点和一个 Output 节点,两者之间的每个节点都会运行。
Events procedural 由应用程序框架调用的回调:Start、每帧调用的更新,以及框架提供的其他回调。
Routine procedural 按顺序执行的步骤:一个 Begin、沿执行连线排列的语句,以及 Return。循环和分支都在这里。
Type definition 你自己的数据结构:数据成员,以及作为其方法的 Function 或 Routine 图。它不会单独运行;由其他图创建它的实例。

添加图

按 Ctrl+T,或单击文档大纲中的 Add graph…。Add a graph 卡片将各种类分别列在 Dataflow、Procedural 和 Definition 下,每种都附有一句话说明其用途。选择一种,输入 Name,然后单击 Add graph;该图会被添加到文档中并打开。

Add a graph 卡片:Dataflow 下有 Flows 和 Function,Procedural 下有 Events 和 Routine,Definition 下有 Type,以及一个 Name 输入框

在大纲中,单击某个图即可显示它,右键单击则可选择 Rename…、Set as entry 和 Delete…。F2 会要求为当前显示的图输入新名称。

入口图

入口图是文档运行的起点,大纲中将其标记为 entry。新文档的入口图名为 Graph,其种类为在 New document 卡片上选择的种类。右键单击另一个图并选择 Set as entry,即可将标记移到该图上;入口图可以是 Flows、Function、Events 或 Routine 图,但 Type 永远不能作为入口。当前显示的图是 Routine 或 Events 图时,Run 会改为运行该图,这样就可以单独试运行文档的某一部分。

Function

Function 是一个带有签名的图,其他图可以像使用节点一样调用它。

  1. 按 Ctrl+T,选择 Function,将其命名为 Twice,然后单击 Add graph。它的画布上有一个 Input 节点和一个 Output 节点。
  2. 在未选中任何内容时,Properties 面板会列出该 Function 的 Inputs 和 Outputs。在 Inputs 下单击 Add entry:会出现一个名为 Input、类型为 Number 的条目。在其 Name 中输入 Value,然后按 Enter。在 Outputs 下执行相同操作,将其命名为 Result。条目的初始类型为 Number;要使用其他类型,请单击其 Type 并从列表中选择:列表先列出常用类型,然后是文档中节点所使用的类型。
  3. 放置一个 Add(托盘中 Number Routines 下的那个),将 Input 节点的 Value 连接到它的两个输入,然后将它的输出连接到 Output 节点上的 Result。
  4. 回到一个 Flows 图,按 Ctrl+Space 并输入 Twice:你的 Function 会出现在以文档命名的标题 Document Modules (Hello) 下。放置它后,它就像任何其他节点一样,接受一个 Value 并给出一个 Result。

重命名条目、更改其类型或调整其顺序时,连线都会保留,每个调用该 Function 的节点也会随之更新。

Routine

Routine 从 Begin 开始,沿着执行连线逐条运行语句。它的语句是带有执行引脚(以箭头绘制)的节点,例如 Print Line、Branch 和各种循环;没有执行引脚的节点(例如 Add)会在某条语句需要其值时运行。

循环体连接在循环的 Next 引脚上,每轮运行一次;循环之后的内容连接在 Completed 上。下面这个 Routine 会打印 0、1 和 2:

  1. 创建一个入口为 Routine 的文档(或按 Ctrl+T 并选择 Routine),它一开始就带有 Begin 和 Return。
  2. 按 Ctrl+Space 并输入 For:第一个结果就是 Procedural Programming 下的循环。放置它。它按 Step 从 Start 计数到 End(包括两端),如果你不修改,这三个值分别为 0、10 和 1。将 End 设为 2。
  3. 放置一个 Print Line。将 Begin 的 Next 连接到 For 的 Previous,将 For 的 Next 连接到 Print Line 的 Previous,将 For 的 Current Value 连接到 Print Line 的 Message。
  4. 将 For 的 Completed 连接到 Return 的 Previous,然后按 F5。

一个 Routine:Begin,从 0 到 2 的 For,用 Print Line 打印当前值,然后是 Return;运行后打印了 0、1 和 2

Return 无论在何处被执行到,都会结束 Routine:如果改为将它连接在循环体内的 Print Line 之后,程序会打印 0 后停止。一个 Routine 可以有多个 Return。

局部变量

Routine 在运行时可以保存自己的值。在未选中任何内容时,单击 Properties 面板中的 Define local variable…(或在托盘中查找 Define Local Variable),为其命名并选择类型。之后托盘会为它提供 Get 和 Set 节点。每次调用 Routine 时,该变量都会从其初始值开始,如果没有初始值,则从其类型的默认值开始。

Events

Events 图是应用程序框架上的一组回调:你放置框架的事件(Start 以及框架提供的其他事件),并在其后连接语句,由框架决定每个事件何时运行。使用哪个框架由图的 Procedural base type 决定,在未选中任何内容时显示在 Properties 面板中,新建的 Events 图为 BasicApplication。单击它可以选择其他框架,例如用于带按钮窗口的框架,或用于带帧循环游戏的框架。Events 图可以包含自己的 Function 和 Routine,供其回调调用:在未选中任何内容时,单击其 Properties 中的 Define behavior member…。GUI 和 Glaze 类别中的示例很值得打开看看,请参阅示例。

Type

Type 定义一个数据结构:它的数据成员,以及其中作为方法的 Function 或 Routine 图。其他图使用它的 Make 节点(对于名为 Point 的 Type,即 Make Point)创建实例,并读取和设置其成员。在其画布上未选中任何内容时,Properties 面板中的 Type kind 用于在以下几种之间选择:Class,由所有持有它的对象共享;Struct,一个会被复制的值;Record,由其成员一次性构建,之后不再更改。

数据成员和初始值

数据成员是属于某个类型、并在多次调用之间保持不变的值,例如累计总数、分数或设置。文档本身就是一个类型,因此它自身的图 Document 可以包含供其中所有图共享的数据成员,Type 也可以包含数据成员。

  1. 单击大纲中的 Document,显示文档自身的图。在未选中任何内容时,单击 Properties 面板中的 Define data member…。(托盘中也有,名为 Define Data Member。)

  2. Define a data member 卡片会要求输入 Name 和 Type。列表先列出 Number、Integer、Text 和 Truth,然后是它们各自的列表和数组(List of Number、Number Array 等),再往后是 Divooka 的其他常用类型,以及文档中节点输出或接受的类型。将其命名为 Total,选择 Number,然后单击 Define。画布上会放置该成员的节点,此后托盘会在文档的每个图中提供 Get Total 和 Set Total。

    Define a data member 卡片:Name 为 Total,Type 列表中选择了 Number

  3. 选中该成员的节点。其 Properties 列出它的 Name、Type 和 Starting value。在 Starting value 中输入 2 并按 Enter:状态栏显示 Set starting value,节点上也会显示该值。

选中的数据成员 Total,在 Properties 面板中其 Starting value 设置为 2

每次运行开始时,Total 都为 2;打印 Get Total 的 Routine 会打印 2。框旁边的叉号可将其重置为类型的默认值。列表或数组也可以设置初始值,逐个元素设置;结构体则逐个部分设置,例如初始值为 X 1、Y 2 的 Point。Flows 图不能拥有自己的数据成员;请在文档的图或 Type 上定义它们。

要重命名成员,请双击其节点的标题栏,或选中它并按 F2:所有读取或设置它的节点都会随之更新。