在Lua(FiveM QBcore)中创建动态径向菜单遇索引问题求助
FiveM QBcore 动态径向菜单异常索引问题解决
我是Lua编程新手,在FiveM的QBcore框架下开发动态径向菜单时遇到了问题:生成的数组出现异常索引,导致游戏内菜单完全失效。尝试用table.insert动态添加菜单项时直接触发错误,只有重复编写完整的菜单硬编码代码才能让菜单正常工作,但这种方式完全满足不了动态化的需求。
经过排查,最终通过封装函数构建菜单对象的方式解决了问题,排查过程如下:
- 初始错误代码:创建菜单时错误地使用
table.insert往嵌套的空对象中添加项,导致出现异常索引 - 二次尝试问题:直接修改已经添加到菜单中的对象时触发了nil引用错误
- 最终可行方案:编写
createRadialJobExtrasMenu函数,根据角色的执勤状态动态生成完整的菜单对象,再将该对象传入AddOption方法完成菜单构建
示例代码
-- 封装的动态菜单生成函数 local function createRadialJobExtrasMenu(isOnDuty) local menuOptions = {} -- 根据执勤状态添加不同选项 if isOnDuty then table.insert(menuOptions, { id = 'job_off_duty', title = '结束执勤', icon = 'power-off', type = 'client', event = 'qb-job:client:ToggleDuty', }) table.insert(menuOptions, { id = 'job_vehicle', title = '调用执勤车辆', icon = 'car', type = 'client', event = 'qb-job:client:SpawnJobVehicle', }) else table.insert(menuOptions, { id = 'job_on_duty', title = '开始执勤', icon = 'check-circle', type = 'client', event = 'qb-job:client:ToggleDuty', }) end return menuOptions end -- 使用示例 local isOnDuty = QB.Functions.GetPlayerData().job.onduty local dynamicMenu = createRadialJobExtrasMenu(isOnDuty) for _, option in pairs(dynamicMenu) do exports['qb-radialmenu']:AddOption(option) end
内容的提问来源于stack exchange,提问作者C Kolkman
相关产品推荐
相关产品推荐

