【Godot4.2】基于MenuBar和PopupMenu的菜单栏生成自定义数据EMBD及其解析

概述

用Godot的MenuBarPopupMenu手动创建有复杂结构和设置选项的菜单栏总是一件繁琐的事情,用代码形式也无法十分优雅。

更好的方式就是选择用数据形式解析和加载,这样我们只需要专注于修改数据,就可以修改实际生成的节点嵌套结构。


【2024年3月1日00:50:59】目前只是一个未经实际代码验证的基础思路,所以后续可能会改进或推翻。这与Tree控件自定义树形数据ETD有一定的相似性,又有所区别。

因为是用于MenuBar的生成,所以全名叫简易菜单栏数据(Easy MenuBar Data,EMBD)。

数据形式

文件 | Alt+F
    打开 | Ctrl+O | 0 | □ | ✕
    保存 | Ctrl+S | 1 | ○
    另存为 | Ctrl+Shift+S
    ---
    关闭 | Ctrl+W
    ---
    > 最近打开
===
编辑
    撤销 | Ctrl+Z 
    重做 | Ctrl+Shift+Z
    ---
    清空 | Alt+Del
===
帮助
    手册 | F1
    论坛
    关于
###
最近打开
    文件1
    文件2
    ---
    全部清空

===

设计和解析思路

  • ###\n将数据分为主菜单栏部分子菜单部分
  • 主菜单栏部分和子菜单部分各自用===\n分出单个PopupMenu所需数据,每个PopupMenu数据块,是一个有二级缩进的结构
  • 每个PopupMenu数据块用\n\t分出具体的菜单项 数据,第1项为PopupMenu的名称,后面所有项为PopupMenu的菜单项
  • 每个菜单项数据始终占据一行

具体的菜单项

---标题 | 快捷键 | 图标索引 | 可选状态标记 | 禁用标记
  • ---代表分割线,可以单独出现也可以与后续数据一同出现
  • ---与标题一起出现时,与标题紧密连接
  • 其余数据项之间用|进行分隔
  • 快捷键 :通过+切分并解析,没有快捷键可以直接留空或用特殊的字符串如nullno等表示
  • 图标索引 :对应icons属性下的图标索引
  • 可选状态标记分别代表复选框和单选框的选中、未选中状态
  • 禁用标记表示禁用

带有子菜单的菜单项

> 子菜单名

可以将同名的PopupMenu作为子菜单。

相关推荐
代码盗圣15 天前
GODOT 4 不用scons编译cpp扩展的方法
游戏引擎·godot
知兀1 个月前
单例模式(自动加载)
笔记·游戏引擎·godot
知兀1 个月前
Godot中的信号
笔记·游戏引擎·godot
知兀1 个月前
【godot游戏引擎学习笔记】初识界面
笔记·游戏引擎·godot
知兀1 个月前
Godot中类和静态类型
笔记·游戏引擎·godot
知兀1 个月前
编辑器、节点树、基础设置
笔记·游戏引擎·godot
巽星石2 个月前
【Godot4.3】匀速和匀变速直线运动粒子
godot·物理·加速度·速度曲线
巽星石2 个月前
【Godot4.3】基于中心点连线的矩形重叠检测
godot·gdscript·碰撞·图形
巽星石2 个月前
【Godot4.3】自定义数列类NumList
godot·gdscript·斐波那契·数列
初级代码游戏2 个月前
C# winforms 使用菜单和右键菜单
开发语言·c#·菜单·winforms·右键菜单·menustrip·上下文菜单