Найти тему

Синтаксис цикла "while" GDScript

Оглавление

Основной синтаксис

Синтаксис цикла while выглядит следующим образом:

Здесь condition — это логическое выражение, при истинности которого выполняется тело цикла.

Пример использования

Рассмотрим простой пример, где мы будем использовать цикл while, чтобы вывести числа от 1 до 5:

-2

Результат:

-3

Объяснение

  1. var count = 1: Инициализируем переменную count, которая будет отслеживать текущее значение.
  2. while count <= 5:: Цикл продолжает выполняться, пока значение count меньше или равно 5.
  3. print(count): В каждом проходе цикла выводим текущее значение count.
  4. count += 1: Увеличиваем count на 1. Без этого оператора цикл будет выполняться бесконечно, так как условие count <= 5 всегда будет истинным.

Безопасность при использовании while

Важно следить за тем, чтобы условие цикла while в какой-то момент стало ложным, иначе вы получите бесконечный цикл, что может привести к зависанию вашей программы. Вот пример:

-4

Результат:

-5

В этом примере, если some_condition станет истинным, цикл завершит выполнение.

Вложенные циклы while

Вы также можете использовать вложенные циклы while. Например, давайте создадим программу, которая будет выводить таблицу умножения:

-6

Результат:

-7

Объяснение

  1. Внешний цикл while контролирует первую цифру (от 1 до 10).
  2. Внутренний цикл while проходит по второй цифре (также от 1 до 10).
  3. Каждую итерацию внутреннего цикла выводится произведение i и j.

Зачем использовать цикл while?

  1. Неопределённое количество итераций: Цикл while удобен, когда вы не знаете заранее, сколько раз нужно повторить код. Например, это может быть полезно при ожидании пользовательского ввода или обработке данных до тех пор, пока они не будут полностью обработаны.
  2. Условия выхода: Вы можете установить сложные условия для выхода из цикла, что делает его гибким для различных сценариев.
  3. Контроль выполнения: Цикл while позволяет вам более строго контролировать, когда вы хотите завершить итерации.

Пример: ожидание условия

Предположим, вы хотите создать цикл, который будет ждать, пока игрок не соберёт определённый предмет. Например:

-8

Результат:

-9

Объяснение кода

  1. extends Node3D:Вы объявляете, что данный скрипт является подклассом Node3D. Это означает, что он будет использоваться в трехмерной сцене и может содержать 3D-объекты и взаимодействовать с ними.
  2. var item_collected = false:Эта переменная используется как флаг для отслеживания состояния: был ли собран предмет или нет. Изначально устанавливается в false, что указывает на то, что предмет еще не собран.
  3. func _ready()::Это специальная функция в Godot, которая вызывается, когда узел становится частью сцены (то есть когда он загружается и готов к использованию).
    Здесь вы вызываете
    await wait_for_item(), чтобы начать выполнение корутины для ожидания сбора предмета.
  4. func collect_item()::Эта функция вызывается, когда игрок собирает предмет.
    Она устанавливает значение
    item_collected в true и выводит сообщение "Предметы собраны!" в консоль. Это информирует игрока о том, что действие завершено.
  5. func wait_for_item() -> void::Это корутинная функция, которая включает логику ожидания.
    Внутри этой функции используется цикл
    while, который продолжается до тех пор, пока item_collected не станет true.
    В каждой итерации цикла выводится сообщение "Ожидание сбора предмета...", а затем вызывается
    await get_tree().create_timer(1.0).timeout, что создает таймер на 1 секунду. Код приостанавливает выполнение до тех пор, пока этот таймер не завершится. Это означает, что каждые 1 секунду будет обновляться текст в консоли.
  6. func _input(event)::Эта функция обрабатывает входные события, такие как нажатия клавиш.
    Проверка
    event.is_action_pressed("ui_accept") определяет, была ли нажата кнопка, привязанная к действию "ui_accept". По умолчанию это может быть клавиша Enter или пробел, в зависимости от настроек ввода.
    Если кнопка нажата, вызывается функция
    collect_item(), что изменяет состояние item_collected на true и выводит сообщение о завершении сбора предмета.

Важные моменты

  • Асинхронность: Использование await позволяет код продолжать выполнение других действий в Godot, не блокируя основной поток, что особенно полезно для игр, где важно поддерживать плавность и отзывчивость интерфейса.
  • Гибкость: Функция collect_item() может быть легко вызвана в разных контексте, например, когда игрок достигает определенного объекта или при выполнении каких-либо условий.
  • Управление состояниями: Разделение логики ожидания и логики сбора предмета делает код более структурированным и читабельным.

Заключение

Цикл while — это мощный инструмент в GDScript для выполнения многократных операций при выполнении определённых условий. Понимание его применения и правильного управления условиями позволяет создавать гибкие и эффективные алгоритмы для различных сценариев в играх, разработанных с помощью Godot.