【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作为子菜单。

相关推荐
郭逍遥6 天前
[Godot] C#使用Json进行数据结构的保存与加载
游戏引擎·godot
黑客影儿12 天前
在Godot中为您的游戏添加并控制游戏角色的完整技术指南
开发语言·游戏·游戏引擎·godot·gdscript·游戏开发·3d游戏
相信神话202113 天前
Godot Shader 中 mix 函数的用法
游戏引擎·godot
郝学胜-神的一滴16 天前
深度解析游戏引擎中的相机:视图矩阵
程序人生·unity·矩阵·游戏引擎·godot·图形渲染·虚幻
scoone19 天前
开源游戏引擎Bevy 和 Godot
游戏引擎·godot
郝学胜-神的一滴1 个月前
Horse3D引擎研发笔记(四):在QtOpenGL下仿three.js,封装EBO绘制四边形
c++·3d·unity·游戏引擎·godot·图形渲染·虚幻
郝学胜-神的一滴1 个月前
游戏引擎(Unreal Engine、Unity、Godot等)大对比:选择最适合你的工具
程序人生·unity·游戏引擎·godot·虚幻·unreal engine
SuBC2 个月前
GODOT-简单对话系统
godot
libo_20253 个月前
AI素材生成:Godot+HarmonyOS 5 MindSpore实现游戏贴图的实时风格迁移
godot
程序员小刘3 个月前
如何开始HarmonyOS 5与Godot引擎融合开发?
华为·游戏引擎·godot·harmonyos