控制结构可以有多个条件。关键字 else 和 elseif 可以创建额外的场景,用于在多个条件下发生。语法看起来像:
显示除 if 和 else 之外的所有语法
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
在此项目中,else 和 elseif 用于代码一个跑步跑道,跑手根据他们的完成时间获得奖励。
编写多个条件
为此项目,您可以为每个奖牌创建独特的 if 声明,但这需要很多时间。 例实例,以下是一个假代码。
所有 if 声明
if finishTime < 5 then-- 获得金牌endif finishTime >= 5 and <= 10 then-- 获得银牌endif 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 声明运行时,它将从上到下运行,仅运行它找到的第一个真实状态。
设置赛道
首先,请放置课程的开始点和终点线,然后创建一个脚本来定时奖励玩家并创建不同的奖牌。
创建一个名为“FinishLine”的固定部分。 要使测试更快,请将开始和结束放置在一起。 您可以在脚本完成后移动终点线。
在终点线中,插入名为 RaceManager 的脚本。然后,添加一个变量来存储比赛开始以来的秒数,并添加一个变量来引用终点线。
local finishLine = script.Parentlocal timePassed = 0创建名为 finish() 的函数。
local timePassed = 0local finishLine = script.Parentlocal function finish()end独拥有:
- 代码一个名为 partTouched() 的函数,当玩家触摸它时运行 finish()。
- 将完成线路部分连接到partTouched()。
- 与下面的例子比较您的代码。
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)播放测试并确认当您触摸到终点线时 finish() 被调用。
避免重复
现在,当玩家触摸到终点线时, finish() 会不间断地调用,直到玩家触摸到零件。
使用一个 Boolean ,变量存储是否或否,以确保调用完成() 只调用一次。
创建一个名为 raceActive 的新变量,并将其设置为 true。
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- 触摸到终点线任何部分时都会运行local function finish()在 if 声明中添加第二个条件来检查 raceActive 是否真实,然后调用 finish() 。
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endend要防止 finish() 再次调用,将 raceActive 设置为 false。
local function finish()print("touched the finish line")raceActive = falseend测试您的游戏以确保您只能看到一次测试打印声明。
追踪时间
像 if 语句,一个时间循环也可以使用条件来确定它是否奔跑。要计时玩家,请使用一个使用时间为 true 的 do 循环,只有当 raceActive Boolean 是真的时才会运行。
在脚本的底部,键入 while raceActive == true do。按“输入”自动完成并添加 end 。
finishLine.Touched:Connect(partTouched)while raceActive == true doend要在循环中让玩家时间,添加 1 到 timePassed 变量每秒。包括打印声明来测试您的工作。
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)end玩游戏,并检查您在输出窗口中显示的每个秒。
获得玩家奖牌
使用多个条件的 if 语句来奖励玩家根据他们的性能获得不同的奖牌。使用 if 语句和两个 else 语句来检查玩家的完成时间并将奖牌奖励给他们。
要确认每个奖牌可以获得,请使用打印声明。
local function finish()raceActive = falseprint("You finished in " .. timePassed)end要获得金牌,请在 timePassed 与所需的时间进行比较。此示例检查玩家的时间是否少于或等于 10 秒。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endend测试并确认金牌可以被授予。
添加额外条件
现在您已经为金牌测试了,使用 elseif 关键字测试其他牌牌的代码条件。
对于银牌,请使用 elseif 和下一个所需时间范围。在此示例中,范围大于 10 秒,但小于或等于 20 秒。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endend使用同一个模式为青铜奖牌。检查您的代码使用下面的示例。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endend测试银和青铜奖牌。
排查提示
如果您看不到银和青铜金属出现,请尝试以下一种。
- 每个 elseif 应该有一个然后在其状态后。
- 在 partTouched() 中,确保 if 声明的第二个条件使用 ==,像在 raceActive == true 中。
- 检查每个 elseif 是否包含在范围内。每个 elseif 条件必须在 if/then 声明的第一行和它的最后 end 之间。
添加其他条件
如果玩家没有赢得任何奖牌,你应该鼓励他们再试一次。在这种情况下,你可以使用一个 else 声明,它将在 不是否定条件 下运行,以显示给他们一条信息。
在最后一个 elseif 下和上面的 end 之间,开始新行并输入 else 。 在另一个, 使用打印声明提示他们重试。 在另一个, 使用 1> 打印声明提示他们重试。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
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