循环(Loop)

Time:5 分钟

Loop(循环)可用来多次执行代码。Lua 中存在多种循环,虽然都会重复运行一段代码,但其执行方式有着一定差异。

循环类型

for — do

fordo 循环可以让开发者将命令或命令组运行指定次数。其基本语法包括一个控制变量(control variable)、一个**起始(start)值、一个结束(end)值和一个非必须的增量(increment)**值。

for

count
https://developer.roblox.com/assets/blt520577ecaffd5e7d/u-arrow-blue.png

控制
变量

=

1
https://developer.roblox.com/assets/blt520577ecaffd5e7d/u-arrow-blue.png

起始

,

10
https://developer.roblox.com/assets/blt520577ecaffd5e7d/u-arrow-blue.png

结束

,

1
https://developer.roblox.com/assets/blt520577ecaffd5e7d/u-arrow-blue.png

增量

do

此循环从起始值开始运行,doend 之间的代码每运行一次,就对此值进行增加或减少一次,直到达到结束值为止。例如,以下循环以 1 开始并增加到 5 为止,在每次迭代时都输出 count(控制变量)值:

    
    for count = 1, 5 do
    	print(count)
    end
    
    
    1
    2
    3
    4
    5

当语句中包含increment(增量)时,增量为正值则向上计数,增量为负值则向下计数:

    
    for count = 1, 10, 2 do
    	print(count)
    end
    
    
    1
    3
    5
    7
    9
    
    for count = 3, 0, -0.5 do
    	print(count)
    end
    
    
    3
    2.5
    2
    1.5
    1
    0.5
    0

while — do

whiledo 循环将评估特定条件为 true 或 false。当条件为 false 时该循环将会结束,并继续执行其后的代码。当条件为 true 时循环将会执行 doend 之间的代码,然后对条件的 true 或 false 进行再次评估。

    
    local timeRemaining = 10
    
    while timeRemaining > 0 do
    	print("剩余秒数: " .. timeRemaining)
    	wait(1)
    	timeRemaining = timeRemaining - 1	
    end
    
    print("倒数计时已归零!")
    
    
    Seconds remaining: 10
    Seconds remaining: 9
    Seconds remaining: 8
    Seconds remaining: 7
    Seconds remaining: 6
    Seconds remaining: 5
    Seconds remaining: 4
    Seconds remaining: 3
    Seconds remaining: 2
    Seconds remaining: 1
    Timer reached zero!

当只使用 true 作为条件时,whiledo 循环可以被用作无限游戏循环:

    
    while true do
    	print("循环中...")
    	wait(0.5)
    end

当使用无限循环时,请务必在其中添加 wait() 等延时语句。如果省略此类语句,可能会导致游戏冻结。

repeat — until

repeatuntil 循环将重复执行,直到满足特定条件。请注意:由于对条件是否满足的测试处于 until ,位于 repeatuntil 之间的代码将至少执行一次。

    
    local currentGoblinCount = 18
    
    -- 在游戏中最多生成 25 个哥布林
    repeat
    	spawnGoblin()
    	currentGoblinCount = currentGoblinCount + 1
    	print("当前哥布林数目: " .. currentGoblinCount)
    until currentGoblinCount == 25
    
    print("哥布林生成完毕!")
    
    
    Current goblin count: 19
    Current goblin count: 20
    Current goblin count: 21
    Current goblin count: 22
    Current goblin count: 23
    Current goblin count: 24
    Current goblin count: 25
    Goblins repopulated!

结束循环

当正在运行的循环不会以普通方式结束(例如无限 whiledo 循环)时,则可以使用 break 命令强制其结束,以便脚本可继续运行其后的代码:

    
    local secondsElapsed = 0
    local timeout = 5
    
    while true do
    	print("循环中...")
    	wait(1)
    	secondsElapsed = secondsElapsed + 1
    
    	if secondsElapsed == timeout then
    		break
    	end
    end
    
    print("循环结束;继续其他项目!")
    
    
    Looping...
    Looping...
    Looping...
    Looping...
    Looping...
    Loop ended; moving on!

***Roblox官方链接:循环(Loop)