【问题标题】:Why does my debounce not work, yet produce no errors?为什么我的 debounce 不起作用,但没有产生错误?
【发布时间】:2021-09-23 09:08:48
【问题描述】:

为什么我的 debounce 不起作用,却没有产生错误?

这是我目前的脚本,但它不起作用。

local UIS = game:GetService("UserInputService")
local toggle = false

script.Parent.BackpackFrame.Visible = false
script.Parent.BackpackText.Visible = false

UIS.InputBegan:connect(function(input)
    if input.KeyCode == Enum.KeyCode.E then
        if toggle == false then
            script.Parent.BackpackFrame.Visible = true
            script.Parent.BackpackText.Visible = true
            toggle = true
        end
        
        if toggle == true then
            script.Parent.BackpackFrame.Visible = false
            script.Parent.BackpackText.Visible = false
            toggle = false
        end
    end
end)

【问题讨论】:

  • 不像...那样工作?它应该做什么而不应该做什么?
  • 另一方面:您可以指定not toggle,并且您不需要以不同方式处理案例toggle == truetoggle == false

标签: lua roblox


【解决方案1】:

代码在将其设置为 true 后立即将其设置为 false。

if toggle == false then
   -- false part
   toggle = true
end

if toggle == true then
    -- true part
    toggle = false
end

只需使用 else 而不是检查两次切换

if toggle then
    -- true part
    toggle = false
else
    -- false part
   toggle = true
end

【讨论】:

  • 非常感谢@cup!
  • 这会是我脑子里大便的脚本吗:local UIS = game:GetService("UserInputService") local toggle = false script.Parent.BackpackFrame.Visible = false script.Parent.BackpackText.Visible = false UIS.InputBegan:connect(function(input) if input.KeyCode == Enum.KeyCode.E then if toggle == true then -- true part toggle = false script.Parent.BackpackFrame.Visible = false script.Parent.BackpackText .Visible = false else -- false part toggle = true script.Parent.BackpackFrame.Visible = true script.Parent.BackpackText.Visible = true end end end)
【解决方案2】:

如果 toggle 为 false,则将其设置为 true

if toggle == false then
  script.Parent.BackpackFrame.Visible = true
  script.Parent.BackpackText.Visible = true
  toggle = true
end

然后在遇到第二个条件语句时立即将其设置为 false。

if toggle == true then
  script.Parent.BackpackFrame.Visible = false
  script.Parent.BackpackText.Visible = false
  toggle = false
end

因此,您的更改会在有机会更新之前立即撤销。

如果您有两个独占状态,请使用 if / else。

if toggle == false then
  script.Parent.BackpackFrame.Visible = true
  script.Parent.BackpackText.Visible = true
  toggle = true
else
  script.Parent.BackpackFrame.Visible = false
  script.Parent.BackpackText.Visible = false
  toggle = false
end

您所做的只是分配布尔值,您可以简单地摆脱条件并执行以下操作:

toggle = not toggle -- toggle your state
-- assign the state to the visible property
script.Parent.BackpackFrame.Visible = toggle
script.Parent.BackpackText.Visibile = toggle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 2013-02-19
    • 2021-12-25
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多