多个条件

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

控制结构可以有多于一个条件。关键字 elseelseif 可以创建在多种条件下应发生的额外场景。语法看起来像这样:

显示elif和else的语法

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

在这个项目中,elseelseif 用于编写一个障碍赛路线,其中跑步者根据完赛时间获得奖励。

代码多个条件

对于这个项目,您可以为每个奖牌写一个独特的 if 声明来奖励玩家,但这需要花很多时间。举个实例子,以下想象的代码。

所有 if 语句

if finishTime < 5 then
-- 获得一枚金牌
end
if finishTime >= 5 and <= 10 then
-- 获得一枚银牌
end
if finishTime > 10 and <= 15 then
-- 获得一枚铜牌
end

更容易阅读且高效的方法是使用单个 if 语句并使用关键字 elseif 提供替代条件来测试以前的条件不是真实的。

使用 elseif 和 else

if finishTime < 5 then
-- 获得一枚金牌
elseif finishTime >= 5 and <= 10 then
-- 获得一枚银牌
elseif finishTime > 10 and <= 15 then
-- 获得一枚铜牌
end

当 if/然后声明运行时,它将从顶部开始并仅运行找到的第一个 真实条件 的代码。

设置竞赛路线

首先放置课程的起点和终点,然后创建一个脚本来计时玩家并奖励不同的奖牌。

  1. 创建一个名为 FinishLine 的锚定部件。为了加快测试速度,将开始和结束放在一起。您可以在完成脚本后移动完成线。

    完成部分
    >

    整个课程
    >

  2. 在完成线中,插入名为 RaceManager 的脚本。然后,添加一个变量来存储比赛开始以来多少秒已过,并添加第二个变量来引用终点线。


    local finishLine = script.Parent
    local timePassed = 0
  3. 创建一个名为 finish() 的函数。


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. 自拥有的:

    • 编写一个名为 partTouched() 的函数,当玩家触碰它时运行 finish()
    • 将完成线部分连接到 partTouched() .
    • 将您的代码与下面的示例进行比较。

    local function finish()
    print("touched the finish line")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 玩游戏测试,检查 finish() 当你触碰完成线时被调用。

防止 finish() 重复

现在,每当玩家触碰终点线时,finish() 将继续调用,直到玩家触碰到部分为止。

使用一个 boolean 变量,该变量存储真实或虚假,以确保 finish() 只被调用一次。

  1. 创建一个名为 raceActive 的新变量并将其设置为 true


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- 每当玩家触碰完成线部分时运行
    local function finish()
  2. 将第二个条件添加到 if 声明,以检查 raceActive 是否真实,然后调用 finish()


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. 要停止 finish() 再次调用,将 raceActive 设置为 false .


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. 测试你的游戏以确保你只看到你的测试打印声明一次。

跟踪时间

像 if 声明一样, while 循环也可以使用条件来确定是否应该运奔跑。要计时玩家,使用 while true do 循环创建一个计时器,只在 raceActive 布oolen是真实的时运行。

  1. 在脚本底部,输入 while raceActive == true do . 按下 Enter 自动完成并添加 end


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. 为了计时玩家,在循环中,每秒钟将 1 添加到 timePassed 变量。包括打印声明来测试你的工作。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. 玩游戏,检查你是否看到每秒钟在输出窗口显示。

奖励玩家奖牌

为了完成,使用多个条件的 if 声明来奖励玩家根据其表现获得不同的奖牌。使用 if 声明和两个 elseif 声明来检查玩家的完成时间并奖励他们正确的奖牌。

  1. 要确认每个奖牌可以授予,请使用打印声明。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. 要授予一枚金牌,编写一个 if 声明,将 timePassed 与所需的完成时间进行比较。这个例子检查玩家的时间是否小于或等于 10 秒。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. 进行游戏测试并确认可以授予金牌。

添加额外条件

现在你已经测试了金牌,使用 elseif 关键字测试了其他奖牌的代码条件。

  1. 对于银牌奖,使用 elseif 和下一个需要的时间范围。在这个例子中,范围大于 10 秒,但小于或等于 20 秒。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    end
    end
  2. 使用相同的模式为青铜奖牌。检查您的代码与以下示例。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    end
    end
  3. 为银牌和青铜牌进行游戏测试。

排除问题的提示

如果你没有看到银和青铜金属出现,尝试以下方法之一。

  • 每个 elseif 应该在其条件之后有一个 then。
  • partTouched() 中,确保 if 声明的第二个条件使用 == ,如在 raceActive == true 中。
  • 检查每个 elseif 是否处于范围内。每个 elseif 条件必须位于 if/then 声明的第一行和它的最后 end 之间。

添加其他条件

如果玩家没有获得任何奖牌,你应该鼓励他们再试一次。在这种情况下,您可以使用一个 else 声明,如果 没有其他条件 是真实的,将显示给他们一条信息。

  1. 在最后的 elseif 和上面的 end 之下,开始新行并键入 else不要 在此添加。在其他情况下,使用打印声明来提示他们再试一次。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    else
    print("Try again!")
    end
    end

2。播放测试以查看其他消信息。

摘要

控制结构可以有多个场景。使用 if 语句来设置初始语句进行检查,然后添加尽可能多的 elseif 条件。最后,使用 else 来说明所有给出条件都为假的情况下应发生的事情。

从顶部开始,所有条件都会被检查,只有第一个真正条件才会运行代验证码。剩余的条件不会被检查,也不会奔跑他们的代码。

完成项目后,您可以扩展脚本以在几种额外方式添加新元素。

  • 添加代码,让玩家在完成后触碰开始线即可重复比赛。
  • 设计一个方法来在比赛期间显示时间。您可以使用 Surface GUI 显示时间在零件上,如在 创建时间桥教程 中。
Completed script

local timePassed = 0
local finishLine = script.Parent
-- 用于防止在竞赛结束时结束()和计时器重复使用
local raceActive = true
-- 当玩家触碰终点线时运行,并向他们展示奖项
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- 检查玩家在比赛激活时是否触摸了零件
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- 在比赛激活时跟踪比赛时间。需要位于脚本底部。
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end