逻辑基础知识
2026-05-08
逻辑基础知识——Mindustry游戏指南,源自wikiwiki-mindustry
来源:基本情報 (wikiwiki.jp 由来、 出典明示)
逻辑/基本信息
最后修改:2021-01-04 (月) 18:54:49
这些关键词已被高亮显示:
逻辑块的类型和说明
※链接名是使用处理器时用Sensor等指定的名称,末尾会附加序号
消息块
与5.0的功能相同,但由于可以用逻辑处理器进行编辑,已重新配置并移至逻辑部分。
链接名:message
鼠标悬停时显示文字
使用Print、PrintFlush进行操作
虽然需要鼠标悬停,但可以轻松输出文字和数字,结合逻辑可用于以下用途:
- 逻辑创建时的调试(检查变量内的值)
- 显示逻辑的运行状况或Sensor的信息
开关
1x1的块,可以通过点击/轻触来切换开/关状态。
该状态可以从微处理器/逻辑处理器读取
链接名:switch
使用Sensor判定开/关
sensor a = @enabled in switch1
@enabled的值为开启时为true(=1),关闭时为false(=0)
特点是可以手动切换开关,用途示例如下:
- 需要强制停止逻辑时的保险功能
微处理器
第一个实际的处理块。
这是1x1的,有10块的链接范围(见下文),可以配置执行各种任务。
以120命令/秒的速度执行。
输入指令的主要块
微处理器、逻辑处理器、超级处理器的功能相同,性能不同
逻辑处理器
与微处理器类似,但为2x2。
有20块的链接范围。
以300命令/秒的速度执行。
超级处理器
与逻辑处理器类似,但为3x3。
具有40块的链接范围。
以1500命令/秒的速度执行。
还需要冷却水。
逻辑显示器
可绘制的大型3x3块。
玩家无法使用它(除了查看),但逻辑块可以使用它来绘制形状(例如矩形、直线、多边形、三角形,要创建圆形,只需使用具有许多边的多边形)。
屏幕尺寸为80x80。
链接名:display
使用Draw、DrawFlush进行操作
显示器的左下角为x=0 y=0,右上角为x=80 y=80
与消息块不同,不需要鼠标悬停就能在地图上进行视觉表示,用途示例如下:
- 以条形图的形式显示核心的物品存储率
- 用颜色显示电力是否有余力
大型逻辑显示器
逻辑显示器的大型版本。
屏幕尺寸为179x179像素,占用6x6的空间。
- 基本与逻辑显示器相同
内存单元
可用于数据存储的1x1块。
虽然逻辑块可以存储自己的数据,但在两个块之间传输数据的唯一方法是使用内存单元。
这允许在64个唯一位置存储64个值。
使用Read、Write进行操作
只能保存数字值
特点是可以在多个处理器之间共享值,有以下用途等:
- 组合处理器进行复杂处理时的共享值存储位置
- 将值传递给远距离的处理器(处理器1(write) → 内存单元1 → 处理器2(read & write) → 内存单元2 → 处理器3(read)通过这样连接可以将值传递到很远的地方)
内存库
可以存储更多数据的2x2内存单元。
具体来说,是512个值
- 基本与内存单元相同
链接
可以被处理器读取和控制的块。
- 不是有一个名为"链接"的块,而是指与处理器链接的块
命令
※详细用法请参考逻辑/使用方法
编程界面类似于Scratch,但只有一个不可嵌套的块堆栈。
一旦到达程序末尾,就会立即从上面重新开始。
由于块的各种计算可能需要时间,建议将较长的程序分成几个较小的逻辑块。
当前6.0中的命令如下:
※附加GUI中的名称(复制到剪贴板时的名称)
Get link(getlink):为每个链接命名meltdown1或smelter3以外的自定义名称。
由于可以通过索引获取每个链接,因此可以循环遍历炮塔。Write(write):写入内存单元的某个位置
Read(read):从内存单元的某个位置读取
Draw(draw):将多个命令保存到"绘制缓冲区"
Draw Flush(drawflush):将绘制缓冲区的内容写入(刷新)显示器
Print(print):添加到"打印缓冲区"
Print flush(printflush):将消息块中的文本替换为打印缓冲区的内容。
Control(control):可以控制块。
(启用/禁用工厂或发射炮塔)Radar(radar):可以检测实体。
要从结果中获取属性,请使用sensorSensor(sensor):块的雷达。
(例如,可以获取内容、生命值、电力和许多其他东西→下一项)。
也可以从radar或@unit/ubind获得的单位获取属性Set(set):将变量设置为值。
在每个"周期"之后重置。Operation(op):执行数学运算(加法、减法等)。
有很多操作(包括位移和三角法)。
此命令可以用一个或两个输入执行数学。
有很多操作我就不一一列举了。End(end):立即结束程序,移至顶部。
还会清除存储在处理器中的变量。Jump(jump):条件满足时,跳转到代码中的任何位置。
(将条件设置为始终以强制跳转)。
这是Mindustry中唯一的控制命令。
当然,可以用if / else / goto / switch / case / default / break / continue / unless / for /(do)while / function / def语句来使用,但使用起来很麻烦。Unit bind(ubind):绑定选定类型的单个单位。
使用@unit引用当前绑定的单位Unit control(ucontrol):控制当前绑定的单位。
有几个子命令,如单位移动或从容器中获取物品Unit radar(uradar):类似于radar,使用单位作为雷达(可能影响距离排序)
Unit locate(ulocate):可以找到特定类型的瓷砖。
可以找到矿石、特定类型的建筑、受损的建筑或敌人的生成点。
子命令
每个命令都有几个子命令。
"draw"的子命令如下:
clear:将显示重置为单一颜色
stroke:设置线条/描边宽度
color:设置下一个形状的颜色,直到颜色改变
line:绘制直线
rect:填充矩形
linerect:绘制空心矩形的描边
poly / linepoly:与rect和linerect相同,但半径和边数可变
triangle:在3个点之间填充三角形。
该子命令没有空心版本
对于其他形状,必须有创意:
圆:添加具有许多边的多边形
空心三角形:在大三角形内部创建小三角形
圆弧:创建圆形,使用矩形切割边侧或绘制许多线段
点:制作小矩形
内置变量
虽然可以使用Set和Operation创建变量,但处理器中有一些内置变量
@links:处理器链接的数量
@time:"Unix时间",自1970年1月1日以来的毫秒数
@unit:参见上文
@ipt:每个时刻的指令
@this:引用自身,用法类似于"container1"
@thisx:处理器的x位置
@thisy:与上述相同,但为y位置
注意
由于每个周期后所有变量都会被清除,请确保有内存单元。
变量仅在使用end块时才会被清除打印刷新会覆盖消息块的内容,但绘制会覆盖旧内容(绘制两个矩形会导致矩形重叠,打印刷新两个单词会导致第一个单词被第二个单词覆盖)
只能读取无人机的状态(如生命值或x位置),但无法控制它们
可以将程序导入和导出到剪贴板。
每个处理器以"周期"执行代码,执行后从上面重新启动
禁用的块如果处理器不总是禁用它,它会自己启用
每次使用单位绑定时,都会绑定到另一个单位,因此可能会意外地同时绑定该类型的所有单位。
来源:https://www.reddit.com/r/Mindustry/comments/ic9wrm/logic_in_60/ (reddit)