Урок 5 из 15

Циклы: while, repeat и for

Писать циклы, которые заканчиваются и не вешают игру.

Теория

Цикл повторяет код, пока верно условие или пока не кончится счётчик. Числовой for повторяет заданное количество раз, while — пока условие истинно, repeat — как while, но проверяет условие после первого прохода.

Главная опасность в Roblox — бесконечный цикл без ожидания. Он не даёт движку заняться остальным, и игра замирает. Поэтому в while true do обязательно есть task.wait().

break прерывает цикл целиком, continue пропускает один проход и переходит к следующему.

  • for i = 1, 10 do — от одного до десяти включительно
  • for i = 10, 1, -1 do — обратный отсчёт
  • task.wait(1) ждёт примерно секунду и возвращает реальное прошедшее время
  • Цикл, который трогает весь Workspace каждый кадр, — верный способ уронить FPS

Пример

Обратный отсчёт до старта раунда с паузой в секунду.

ServerScriptService/Loops.lua
  1. for seconds = 5, 1, -1 do
  2. print("Старт через " .. seconds)
  3. task.wait(1)
  4. end
  5.  
  6. print("Раунд начался")
  7.  
  8. local attempts = 0
  9.  
  10. while attempts < 3 do
  11. attempts += 1
  12. print("Попытка " .. attempts)
  13. end

Задача

Выведи числа от 1 до 20, но пропусти все нечётные, а на числе 16 останови цикл совсем.

  • Чётность проверяется остатком: number % 2 == 0
  • Пропустить проход — continue, остановить цикл — break
Показать решение
ServerScriptService/Solution.lua
  1. for number = 1, 20 do
  2. if number > 16 then
  3. break
  4. end
  5.  
  6. if number % 2 ~= 0 then
  7. continue
  8. end
  9.  
  10. print(number)
  11. end

Проверь себя

Почему в while true do нужен task.wait()?

Показать ответ

Без ожидания поток занят целиком, и всё остальное перестаёт работать.

Чем continue отличается от break?

Показать ответ

continue переходит к следующему проходу, break заканчивает цикл целиком.