Project Graph

自动计算引擎

本页面中的示例都是可以交互的

当文本内容为特定的格式时,就会变成逻辑节点,例如 #ADD#

逻辑节点可以看成一个函数,一个有若干个输入值和若干个输出值的函数。

输入值的顺序由节点摆放的x坐标位置,即从左到右排布。输出值的顺序由节点的输出端口位置,即从上到下排布。

例如 #ADD# 节点会执行加法运算。它输入无穷多个参数,输出一个值。

按住 x 键时,所有逻辑节点就会以屏幕刷新率的速度不停的执行。松开 x 键时,所有逻辑节点就会停止执行。

2025.1.19 日后的开发版中,以及 1.2.7+ 版本中,舞台上有多个逻辑节点交织在一起时,每一帧都会按照从上到下的顺序执行每个逻辑节点。 如果两个逻辑节点y轴坐标恰好对齐,相等了,则按照从左到右的顺序执行,即x轴坐标靠左的节点先执行。 节点的坐标位置按左上角顶点位置来算 请注意打开特效,能够看到执行顺序编号

2025.1.19 日后的开发版中,以及 1.2.7+ 版本中,按住shift+x键,会以更慢的速度,每60帧执行一次。

以上是一个加法的例子,可以将各种逻辑节点组合起来,构筑成一套逻辑

以上是一个计算 (2^3)^2 = 64 的运算方法,既可以使用两个逻辑节点分步骤运算,也可以直接用一个逻辑节点来计算,至于是否能接收超过两个以上的输入值,需要看对应逻辑节点的具体说明。

节点类型及功能

数学类

一元运算

  • #ABS#: 计算每一个父节点的绝对值,并依次输出这些值
  • #FLOOR#: 将单个父节点文本转换为数字后取整(向下取整)。
  • #CEIL#: 将单个父节点文本转换为数字后取整(向上取整)。
  • #SQRT#: 将所有父节点数字开平方并依次输出

二元运算

  • #ADD#: 累加,计算所有父节点文本转换为数字的和。
  • #SUB#: 累减,将所有的父节点按照从左到右的顺序依次做减法运算,例如 10 5 2 会变成 10 - 5 - 2,结果为3。
  • #MUL#: 累乘,计算所有父节点文本转换为数字的乘积。
  • #DIV#: 累除,原理同减法。
  • #MOD#: 计算前两个父节点文本转换为数字的余数 例如 5 % 2 = 1
  • #POW#: 左侧父节点值为a,右侧父节点值为b,输出 a的b次方
  • #LOG#: 左侧父节点值为a,右侧父节点值为b,输出 log以a为底,b的对数

一元函数

  • #LN#: 将所有父节点的数字取 ln(x) 并依次输出
  • #EXP#: 将所有父节点的数字取 e^x 并依次输出
  • #SIN#: 将所有父节点的数字 x 取 sin(x) 并依次输出
  • #COS#: 同理sin
  • #TAN#: 同理sin
  • #ASIN#: 将所有父节点的数字 x 取 arcsin(x) 并依次输出
  • #ACOS#: 同理arcsin
  • #ATAN#: 同理arcsin

取值和比较

  • #MAX#: 计算所有父节点文本转换为数字的最大值。
  • #MIN#: 计算所有父节点文本转换为数字的最小值。

以下是比较节点,都是输入左右两个节点和输出一个节点。

若比较成立,则输出1,不成立输出0。

  • #LT#: <
  • #GT#: >
  • #LTE#: ≤
  • #GTE#: ≥
  • #EQ#: 判断等于
  • #NEQ#: 判断不等于

逻辑门运算

  • #AND#: 计算所有父节点文本转换为数字的与运算。
  • #OR#: 计算所有父节点文本转换为数字的或运算。
  • #NOT#: 如果有一个父节点,计算其逻辑非值(0 变 1,非 0 变 0)。
  • #XOR#: 异或运算

字符串操作

  • #UPPER#: 将单个父节点文本转换为大写。

  • #LOWER#: 将单个父节点文本转换为小写。

  • #LEN#: 计算单个父节点文本的长度。

  • #COPY#: 复制单个父节点的文本。

  • #SPLIT#: 根据第二个父节点文本作为分隔符,对第一个父节点文本进行分割,输出多个结果。

    #SPLIT# 逻辑节点 在 1.4.34+ 版本更改为支持多个分隔符

    第二个参数及其后面的全部参数都可以作为分隔符

    例如:

    参数1: 你好,世界!我是一个人 参数2: , 参数3: !

    返回值:你好, 世界, 我是一个人

  • #REPLACE#: 将第一个父节点的文本中替换掉第二个父节点文本为第三个父节点的文本。

  • #CONNECT#: 将所有父节点文本连接成一个字符串。

概率论与数理统计

  • #RANDOM#: 生成一个随机数。
  • #RANDOM_INT#: 输入a,b两个整数,输出一个[a, b]范围内的随机整数。
  • #RANDOM_FLOAT#: 输入a,b两个浮点数(实数),输出一个[a, b]范围内的随机浮点数。
  • #RANDOM_POISSON#: 泊松分布,输入一个参数λ,输出一个随机数。
  • #COUNT#: 输出所有父节点的数量。
  • #AVE#: 输出所有父节点的平均值。
  • #MEDIAN#: 输出所有父节点的中位数。
  • #MODE#: 输出所有父节点的众数。
  • #VARIANCE#: 输出所有父节点的方差。
  • #STANDARD_DEVIATION#: 输出所有父节点的标准差。

敬请期待

节点操作

  • #RGB#: 将三个节点连向此逻辑节点,分别是0~255之间的数字。再将此逻辑节点连向一个节点,运行后即可将指定的节点填充颜色
  • #RGBA#: 同上,只不过输入的节点数量变成4,新增一个0~1的透明度值
  • #GET_NODE_RGBA#: 将一个节点连向此逻辑节点,会输出四个值,分别表示该输入节点的颜色,r,g,b,a
  • #COLLECT_NODE_NAME_BY_RGBA#: 输入四个值(r,g,b,a),运行后,该逻辑节点将收集全舞台上所有和该颜色完全相等的文本节点的内容,并依次输出成新的文本节点。注:在收集的过程中,直接和逻辑节点相连接的节点会被过滤。

例如上图的例子,可以将所有通过颜色标注的节点提取出来,统一看看

  • #COLLECT_NODE_DETAILS_BY_RGBA#: 同上,只是收集的是所有目标颜色节点的详细信息并将他们输出成新的文本节点。

  • #GET_LOCATION#: 获取输入节点的左上角位置,并输出两个值,一个是x值(偏上),一个是y值(偏下)

  • #SET_LOCATION#: 将两个值连向此逻辑节点,左侧代表x,右侧代表y,再将此逻辑节点连向一个节点,运行后即可将此节点的左上角位置对准指定的目标位置。

  • #GET_SIZE#: 将一个节点连向此逻辑节点,逻辑节点将输出该节点的大小,一个是宽度,一个是高度

  • #GET_MOUSE_LOCATION#: 运行后,此逻辑节点直接输出鼠标的x值和y值,注意是世界坐标系,不是窗口坐标系。

  • #IS_COLLISION#: 输入两个节点,输出一个0/1的节点,如果两个节点碰撞了,则输出值为1

  • #CREATE_TEXT_NODE_ON_LOCATION#: 在特定位置创建一个文本节点,第一个输入x值,第二个输入y值,第三个输入节点文本内容,第四个输入0/1代表是否创建(1代表创建,0代表不创建,可以在上游增加一个瞬时脉冲电路来防止按下x后创建很多重叠的重复节点)。

  • #IS_HAVE_ENTITY_ON_LOCATION#: 检测某位置是否存在实体,输入一个x值和y值,输出一个0/1的节点,如果在该位置有实体,则输出值为1

  • #REPLACE_GLOBAL_CONTENT#: 输入两个节点,第一个是原字符串,第二个是新字符串,运行后将舞台上全部的文本节点中的文字中,含有原字符串的部分替换为新字符串。

  • #SEARCH_CONTENT#: 输入两个节点,第一个是搜索的关键字,第二个是数字0或1,0代表不开启大小写敏感,1代表开启大小写敏感,运行后将所有匹配的节点的UUID输出。注意如果更换了关键字,需要手动删除所有子节点。否则可能造成干扰。

  • #DELETE_PEN_STROKE_BY_COLOR#: 输入 r,g,b,a 四个值,运行后删除舞台上所有颜色相同的涂鸦笔画。主要用于讲课、录制视频教程的场景使用。注:在没有自动上色时,且为黑色主题下,涂鸦颜色看上去是略微暗一点点的白色,和节点的边框一个颜色,但实际上在数据层面,涂鸦颜色为 (0,0,0,0)。这是一个特殊规定,当涂鸦颜色为 (0,0,0,0) 时,渲染的颜色会自动跟随当前颜色主题下的(实体边框颜色)。这样就能够在切换成白色或者其他主题颜色的时候,自动更改这些涂鸦的颜色了。

  • #GET_NODE_UUID#: 输入一个节点,输出该节点的UUID。

  • #SET_LOCATION_BY_UUID#: 输入 UUID,x,y 三个值,运行后,将指定 UUID 的节点的移动到 (x,y)位置上。

类编程操作

  • #SET_VAR#: 输入两个节点,左节点是变量名,右节点是变量的值,相当于编程语言中最基础的赋值操作。
  • #GET_VAR#: 输入一个节点,当节点名称恰好是曾经赋值过的变量名时,会输出这个变量的值。

这里的设计思路是按照脚本语言python设计的,直接赋值即可完成声明。如果使用了不存在的变量,会输出NaN

摄像机操作

  • #GET_CAMERA_LOCATION#: 运行后,直接输出摄像机所在的世界位置
  • #SET_CAMERA_LOCATION#: 运行后,将两个输入的值作为x值和y值,将摄像机移动到此位置上。
  • #GET_CAMERA_SCALE#: 获取摄像机的缩放等级数字
  • #SET_CAMERA_SCALE#: 设置摄像机的缩放等级数字

声音操作

  • #PLAY_SOUND#: 输入一个绝对文件路径和一个0/1,当第二个节点为1时,运行即可播放该文件对应的音频

其他操作

  • #GET_TIME#: 获取此时此刻的时间戳
  • #FPS#: 获取此时渲染帧率(不同的电脑和显示器可能不同,一般为60,如果您的显卡和显示器强劲,可能达到100+)

简化的运算方法

可以直接把 + - * / 等二元运算符号写在线上,然后按下x键直接生成计算结果

甚至还可以进一步简化:

+2 写在线上,然后按下 x 键,生成计算结果

使用流程

  1. 创建所需功能的节点(如 #ADD##SUB# 等)。
  2. 确保每个逻辑节点都有正确的父节点输入。
  3. 运行自动计算引擎,输出结果将在相关子节点中显示。

注意事项

  • 在进行数学运算时,确保输入可以正确转换为数字。
  • 特定节点功能如 #SPLIT##REPLACE# 需要满足父节点的数量要求。
  • 使用时,确保节点的逻辑关系正确,以避免计算错误。
  • 若发现使用情况和文档说明不一致,可以在github issue中反馈。

On this page