Jedi-Academy UI系统入门:纯文本.menu文件如何驱动整个游戏界面
【免费下载链接】Jedi-AcademyStar Wars Jedi Knight: Jedi Academy项目地址https://gitcode.com/gh_mirrors/je/Jedi-Academy点击查看免费下载Jedi-Academy《星球大战绝地武士2绝地学院》把整个游戏界面写成纯文本.menu文件主菜单、暂停菜单、联机大厅全部由base/ui目录下的 90 余个脚本文件与code/ui中的 C 解析器共同驱动没有可视化编辑器。本文带你快速看懂这套 Jedi-Academy UI 系统的加载流程与文件结构并给出新手上手的改法。 UI 系统全景目录与文件职责整套界面由两部分组成理解它们的分工是入门的关键目录职责关键文件base/ui/界面数据菜单布局、按钮、字体、音效引用main.menu、menus.txtbase/ui/jamp/多人模式JAMP菜单multiplayer.menu、rules_games.menucode/ui/界面引擎加载、解析、绘制、事件响应ui_main.cpp、ui_shared.cpp 简单说.menu文件负责长什么样、点了干什么code/ui里的 C 代码负责把文本变成可交互的窗口。改界面通常只动文本不必碰代码。清单文件.txt则负责列出这一套界面要加载哪些.menu。游戏启动时加载的是 base/ui/menus.txtloadMenu { ui/main.menu } loadMenu { ui/newgame.menu } loadMenu { ui/character.menu } loadMenu { ui/saber.menu } ... 菜单加载流程从 menus.txt 到 .menu 的四步解析整个加载链条非常线性每一步都能在源码中找到对应函数选择清单—UI_Load()读取 cvarui_menuFiles默认为ui/menus.txt若处于游戏内暂停状态则改用ui/ingame.txt。见 ui_main.cpp#L3932-L3966解析清单—UI_LoadMenus()逐 token 扫描清单文件遇到loadmenu关键词就取出后面的文件路径。见 ui_main.cpp#L3855-L3925加载单个文件—Load_Menu()读取该.menu文件并交给UI_ParseMenu()后者识别两大块assetGlobalDef全局资源和menuDef菜单窗口解析控件— 每个itemDef由Item_Parse()处理字段名通过关键词哈希表快速匹配到解析函数未知字段会打印Unknown item keyword警告。见 ui_shared.cpp#L5316-L5372menus.txt ──loadMenu──▶ main.menu ──assetGlobalDef──▶ 字体/光标/音效 └──menuDef─────▶ 窗口 itemDef按钮/滑块/列表 解剖一个 .menu 文件三大代码块以 base/ui/main.menu主菜单548 行为例文件由三部分组成代码块作用main.menu 中的示例assetGlobalDef本菜单的全局资源字体、光标、焦点音效、渐隐参数smallFont aurabesh 18、focuscolor 0 0 1 1menuDef一个完整窗口名字、坐标、焦点设置、ESC 行为name mainMenu、rect 0 0 640 480itemDef窗口内的单个控件按钮、背景图、文本、模型name newgamebutton、type ITEM_TYPE_BUTTONassetGlobalDef还内置了一个precacheSound列表把角色定制界面的选头、选躯干、选光剑等音效提前载入内存保证点击时零延迟。一个完整的按钮长什么样主菜单的新建游戏按钮main.menu第 211-246 行展示了 Jedi Academy 按钮的全部套路itemDef { name newgamebutton type ITEM_TYPE_BUTTON rect 36 212 130 24 text MENUS_NEW action { play sound/interface/button1.wav ; close all ; open newgamefirstMenu } }注意三个细节rect是x y w h坐标系以 640×480 为基准MENUS_NEW不是死文本而是字符串引用运行时通过SE_GetString()从本地化文件中取真正文案ui_shared.cpp#L5397-L5401这是实现多语言的基础action里close allopen newgamefirstMenu就是菜单间跳转的全部机制——靠名字互相引用形成一张菜单导航图悬停高亮mouseEnter / mouseExit每个按钮都配了一个发光底板button_glow默认隐藏鼠标进入时显示并定位到按钮下方mouseEnter { show button_glow setitemrect button_glow 16 210 210 32 }这套隐藏装饰 事件切换可见性的模式贯穿整个菜单系统是纯文本描述状态变化的典型范例。 控件类型与本地化menudef.h 里的零件库itemDef的type字段对应 code/ui/menudef.h 中定义的控件枚举Jedi Academy 一共提供 15 种控件类型用途典型场景ITEM_TYPE_TEXT静态文本菜单标题ITEM_TYPE_BUTTON按钮新建游戏ITEM_TYPE_EDITFIELD文本输入绑定 cvar玩家名字ITEM_TYPE_SLIDER滑杆音量、鼠标灵敏度ITEM_TYPE_LISTBOX滚动列表存档选择、地图选择ITEM_TYPE_MODEL3D 模型展示角色定制界面预览ITEM_TYPE_COMBO/ITEM_TYPE_MULTI下拉/枚举列表难度、游戏类型ITEM_TYPE_BIND按键绑定控制设置ITEM_TYPE_TEXTSCROLL滚动长文本过场说明其中ITEM_TYPE_LISTBOX最值得新手了解列表数据不是写死在.menu里的而是由menudef.h中的FEEDER_*常量指定数据源如FEEDER_SAVEGAMES读存档、FEEDER_MAPS读地图、FEEDER_SERVERS读服务器列表C 引擎负责填充。文本、列表、按钮各司其职。 游戏内菜单与多人模式谁在用哪套清单Jedi Academy 的菜单按场景分成几套独立清单互不干扰清单文件使用场景base/ui/menus.txt启动后的主界面主菜单、角色定制、设置base/ui/ingame.txt游戏中按 ESC 的暂停菜单、数据板datapadbase/ui/tier1.txt章节过场时的地图选择base/ui/jamp/多人模式全部 51 个菜单大厅、投票、围城模式多人菜单由 codemp/ui/ 下的 UI 模块加载。ingame.txt里能看到数据板系列菜单datapadforcepowers.menu、datapadweapons.menu等对应游戏中按 R 键查看的光剑面板——它同样是纯.menu文件只是绘制风格换成了全息数据板样式。⌨️ 一个实用技巧ui_menuFiles这个 cvar 可以在控制台直接改写指向你自己的清单文件就能在不替换原菜单的情况下测试一套新界面——这正是当年 mod 作者的做法。 动手上手改你的第一个菜单仓库是只读的先把base/ui/main.menu复制到本地游戏目录再动手。推荐的新手三步骤改文案把main.menu中newgamebutton的descText从MENUS_START_A_NEW_GAME换成纯文本去掉前缀观察悬停描述变化改布局把exitgamebutton的rect 255 444 130 24中的 x 坐标改成40退出按钮就跑到左边了加菜单新建mymenu.menu照抄main.menu改按钮文字再在menus.txt末尾加一行loadMenu { ui/mymenu.menu }并从主菜单某个按钮的action里open它遇到解析问题不要慌控制台会提示Unknown item keyword xxx字段名拼错或Invalid keyword xxx块层级写错按提示回查 ui_main.cpp#L3796 附近的解析逻辑即可。 进阶工具用 ModView 浏览界面素材.menu里background字段引用的gfx/menus/*贴图、字体文件等资源可以配合仓库自带的 ModView 工具查看。该工具位于 tools/ModView/是一个独立的资源浏览器把.menu与它引用的贴图、音效对照着看文本 → 窗口的完整映射关系就清晰了。 总结.menu 文件速查表想做什么去哪改换按钮文字/颜色对应.menu的itemDeftext、forecolor换菜单背景itemDef的background字段 gfx/menus/贴图改按钮跳转目标action块中的open xxxMenu改字体/全局音效assetGlobalDef块增删菜单文件对应清单文件menus.txt/ingame.txt新增控件行为需改 code/ui/ui_shared.cpp 的关键词解析表核心结论Jedi-Academy 的 UI 系统是一套文本即界面的声明式设计——.txt清单管加载、.menu文件管布局与交互、C 解析器管执行。90 余个菜单文件全部可读可改这使它成为研究 Quake3/JK2 家族 UI 架构的最佳范例也是自制 mod 界面最直接的切入点。赞分享【免费下载链接】Jedi-AcademyStar Wars Jedi Knight: Jedi Academy项目地址https://gitcode.com/gh_mirrors/je/Jedi-Academy点击查看免费下载相关推荐Jedi-Academy数据文件格式速览.npc、.veh、.menu如何定义游戏内容Jedi Academy数据文件格式速览.npc、.veh、.menu如何定义游戏内容 《星球大战克隆人……不是《星球大战 绝地骑士绝地学院》StarJedi-Academy实体系统揭秘gentity_t与Spawn变量如何构建游戏世界Jedi Academy实体系统揭秘gentity_t与Spawn变量如何构建游戏世界 Jedi Academy 是经典射击游戏《星球大战 绝地武士绝地学院Jedi-Academy过场系统Icarus终极指南脚本语言如何驱动电影级剧情Jedi Academy过场系统Icarus终极指南脚本语言如何驱动电影级剧情 Jedi Academy星球大战原力释放 绝地学院开源仓库中的 Icar上一篇Mapster忽略属性精细控制对象映射过程的终极指南下一篇如何让微信聊天记录永不消失三招实现数字记忆永久珍藏创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考