多个条件

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

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

显示除 if 和 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 来提供替换条件以测试是否测试前的条件不是真实的。

使用 else 和 else

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

当 if/then 声明运行时,它将从上到下运行,仅运行它找到的第一个真实状态。

设置赛道

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

  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() 会不间断地调用,直到玩家触摸到零件。

使用一个 Boolean ,变量存储是否或否,以确保调用完成() 只调用一次。

  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 语句,一个时间循环也可以使用条件来确定它是否奔跑。要计时玩家,请使用一个使用时间为 true 的 do 循环,只有当 raceActive Boolean 是真的时才会运行。

  1. 在脚本的底部,键入 while raceActive == true do。按“输入”自动完成并添加 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 语句和两个 else 语句来检查玩家的完成时间并将奖牌奖励给他们。

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


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. 要获得金牌,请在 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 应该有一个然后在其状态后。
  • partTouched() 中,确保 if 声明的第二个条件使用 ==,像在 raceActive == true 中。
  • 检查每个 elseif 是否包含在范围内。每个 elseif 条件必须在 if/then 声明的第一行和它的最后 end 之间。

添加其他条件

如果玩家没有赢得任何奖牌,你应该鼓励他们再试一次。在这种情况下,你可以使用一个 else 声明,它将在 不是否定条件 下运行,以显示给他们一条信息。

  1. 在最后一个 elseif 下和上面的 end 之间,开始新行并输入 else 。 在另一个, 使用打印声明提示他们重试。 在另一个, 使用 1> 打印声明提示他们重试。


    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 来声明所有给定条件为 false 的情况下发生什么。

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

完成项目后,您可以基于脚本扩展项目,以便在几个额外方法上添加新元素。

  • 添加代码,以便玩家在完成时触摸起始线来重复比赛。
  • 设计一个显示时间在赛车中的方法。你可以使用界面图形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