我在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)

这是层次结构:

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

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

点赞
用户7170955
用户7170955

问题在于你执行 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本地 值,这意味着它不会保存更改。 为了解决这个问题,我们需要直接给 game.Workspace.LogRideToggledValue 赋值,可以像这样做:

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 不起作用。

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 在这种情况下只会产生 truefalse

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(),可以使用逻辑非替换 logRideToggled.Value =,如下所示。

script.Parent.Parent.Activated:connect(function()
    local logRideToggled = game.Workspace.LogRideToggled
    if logRideToggled.Value then
        -- 如果是truthy,要做的工作
    else
        -- 如果是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)

希望这能帮到你!

2017-09-13 05:12:47