You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用DM Script安全检查GMS UI中子菜单是否存在?

问题:GMS UI开发中安全检查子菜单是否存在

我正在使用GMS UI进行开发,主菜单下可能存在或不存在某个特定子菜单。我的目标是检查该子菜单是否存在,且在不存在时不触发报错。

当前实现代码:

Object MB = GetMenuBar()
Object Menu = MB.FindMenuItemByName("Menu")
Object SubMenu = Menu.FindMenuItemByName("SubMenu")
Result(SubMenu.GetName())

问题在于,当子菜单不存在时,调用Menu.FindMenuItemByName("SubMenu")会触发报错,即使尝试用try-catch块包裹代码也无法解决。

疑问:

  1. DM Script中是否有内置或推荐的方法,可在访问子菜单属性前验证其是否存在?
  2. 如何修改脚本,安全检查子菜单是否存在并处理不存在的情况,且不触发报错?

解决方案

关于内置检查方法

DM Script没有直接的Exists类方法,但可以通过验证对象有效性来判断。GMS的UI对象查找失败时,会返回一个内部引用为空的无效Object,使用IsValid()函数检测对象有效性是官方推荐的验证方式。

修改后的安全检查脚本

核心思路是每一步查找后都验证对象有效性,避免调用无效对象的方法触发报错:

Object MB = GetMenuBar()
if (!IsValid(MB)) {
    Result("主菜单对象无效")
    exit()
}

Object Menu = MB.FindMenuItemByName("Menu")
if (!IsValid(Menu)) {
    Result("未找到指定主菜单")
    exit()
}

Object SubMenu = Menu.FindMenuItemByName("SubMenu")
if (IsValid(SubMenu)) {
    Result("子菜单存在,名称:" + SubMenu.GetName())
} else {
    Result("子菜单不存在")
}

补充说明

  • IsValid()函数可检测所有GMS对象的有效性,包括菜单、对话框、控件等,是DM Script处理UI对象空引用的标准方案。
  • 不建议用try-catch处理这类场景,因为GMS部分UI操作的报错无法被常规try-catch捕获,前置IsValid()检查更可靠。

内容的提问来源于stack exchange,提问作者ChenZX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:30:02