制作Roblox背包装备系统时数字键触发代码次数异常(2000+次)
Roblox背包系统按键触发多次问题解决
你的代码里按键触发数千次的核心原因是:while wait() do循环里反复调用uis.InputBegan:Connect(),每循环一次就给InputBegan事件绑定一个新的处理函数。当你按下按键时,所有已绑定的函数都会执行,次数随循环次数累积,最终导致触发上千次。
修正步骤:
- 移除无限循环,将
InputBegan事件绑定放在循环外,只执行一次 - 利用
processed参数过滤掉聊天框等输入场景,避免误触发
修正后的代码:
local player = game.Players.LocalPlayer local uis = game:GetService("UserInputService") local inventoryFolder = Instance.new("Folder") inventoryFolder.Name = "InventoryFolder" inventoryFolder.Parent = player local hotbar = script.Parent.Hotbar -- 初始化背包物品到背包文件夹并同步快捷栏 for i, v in pairs(player.Backpack:GetChildren()) do v.Parent = inventoryFolder local slot = hotbar[i] if slot and slot.SlotItem.Value == nil then slot.SlotItem.Value = v local itemAsset = game.ReplicatedStorage:FindFirstChild(tostring(slot.SlotItem.Value)) if itemAsset then slot.Image = itemAsset.Texture end end end -- 只绑定一次按键事件 uis.InputBegan:Connect(function(key, processed) -- 忽略已被处理的输入(比如聊天框输入) if processed then return end if key.KeyCode == Enum.KeyCode.One then print("按下数字1,执行装备逻辑") -- 这里添加你的装备功能代码 end end)
额外优化建议:
- 给快捷栏绑定加
slot存在判断,避免索引越界报错 - 通过
FindFirstChild获取物品资源,防止物品不存在时崩溃 - 如果后续需要动态同步背包物品到快捷栏,可以监听
inventoryFolder的ChildAdded事件
内容的提问来源于stack exchange,提问作者TrulyBlue2
相关产品推荐
相关产品推荐

