我有麻烦让我的切换脚本在roblox中工作

时间:2017-09-10 17:20:19

标签: lua roblox

我需要帮助 这是剧本:

script.Parent.Parent.Activated:connect(function()
local a = game.Workspace.LogRideToggled.Value
    if a == true then
        a = false
        script.Parent.Click:Play()
    end
    if a == false then
        a = true
        script.Parent.Click:Play()
    end
end)

这是hirachy:

https://imgur.com/a/4FXHY

但是没有发生,也没有错误,除了点击声音播放 我真的需要帮助

1 个答案:

答案 0 :(得分:0)

问题在于,在您执行a == true之后,您将a设置为false,然后a == false匹配。

您可以使用if then else end语句解决此问题,如下所示:

script.Parent.Parent.Activated:connect(function()
    local a = game.Workspace.LogRideToggled.Value
    if a == true then
        a = false
        script.Parent.Click:Play()
    else
        a = true
        script.Parent.Click:Play()
    end
end)

但是,这只会更改a local 值,这意味着它不会保存更改。 要解决此问题,我们需要直接指定game.Workspace.LogRideToggled的值Value,我们可以这样做:

script.Parent.Parent.Activated:connect(function()
    if game.Workspace.LogRideToggled.Value == true then
        game.Workspace.LogRideToggled.Value = false
        script.Parent.Click:Play()
    else
        game.Workspace.LogRideToggled.Value = true
        script.Parent.Click:Play()
    end
end)

虽然这样反复索引是不好的做法,但我们可以将game.Workspace.LogRideToggled存储在局部变量中。您可以了解其工作原理,但存储value不会here

script.Parent.Parent.Activated:connect(function()
    local logRideToggled = game.Workspace.LogRideToggled
    if logRideToggled.Value == true then
        logRideToggled.Value = false
        script.Parent.Click:Play()
    else
        logRideToggled.Value = true
        script.Parent.Click:Play()
    end
end)

此外,== true是多余的,因为Lua希望truthyfalsey值作为条件,在这种情况下所有== true都会给true }或false如果它是假的。

script.Parent.Parent.Activated:connect(function()
    local logRideToggled = game.Workspace.LogRideToggled
    if logRideToggled.Value then
        logRideToggled.Value = false
        script.Parent.Click:Play()
    else
        logRideToggled.Value = true
        script.Parent.Click:Play()
    end
end)

然而,我们可以更多地清理它,因为我们在两种情况下都使用script.Parent.Click:Play(),我们可以用逻辑not替换logRideToggled.Value =,就像这样。

script.Parent.Parent.Activated:connect(function()
    local logRideToggled = game.Workspace.LogRideToggled
    if logRideToggled.Value then
        -- Todo if truthy
    else
        -- Todo if falsey
    end
    logRideToggled.Value = not logRideToggled.Value
    script.Parent.Click:Play()
end)

但如果您只想切换此值,不要对这两种情况做任何特殊处理,我们可以删除整个条件,留下:

script.Parent.Parent.Activated:connect(function()
    local logRideToggled = game.Workspace.LogRideToggled
    logRideToggled.Value = not logRideToggled.Value
    script.Parent.Click:Play()
end)

希望这有帮助!