Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

MainLoop

Успадковує: Object

Успадковано від: SceneTree

Абстрактний базовий клас для основної петлі гри.

Опис

MainLoop — це абстрактний базовий клас для ігрового циклу проекту Godot. Його успадковує SceneTree, який є реалізацією ігрового циклу за замовчуванням, що використовується в проектах Godot, хоча також можна написати та використовувати власний підклас MainLoop замість дерева сцени.

Після запуску програми ОС повинна бути надана реалізація MainLoop; інакше програма завершить роботу. Це відбувається автоматично (і SceneTree створюється), якщо MainLoop Script не надано з командного рядка (наприклад, godot -s my_loop.gd) або налаштування проекту ProjectSettings.application/run/main_loop_type не перезаписано.

Ось приклад сценарію, що реалізує простий MainLoop:

class_name CustomMainLoop
extends MainLoop

var time_elapsed = 0

func _initialize():
    print("Ініціалізовано:")
    print(" Час початку: %s" % str(time_elapsed))

func _process(delta):
    time_elapsed += delta
    # Повернути true для завершення основного циклу.
    return Input.get_mouse_button_mask() != 0 || Input.is_key_pressed(KEY_ESCAPE)

func _finalize():
    print("Завершено:")
    print(" Час завершення: %s" % str(time_elapsed))

Методи

void

_finalize() virtual

void

_initialize() virtual

bool

_physics_process(delta: float) virtual

bool

_process(delta: float) virtual


Сигнали

on_request_permissions_result(permission: String, granted: bool) 🔗

Увімкніть, коли користувач реагує на запит на дозвіл.


Константи

NOTIFICATION_OS_MEMORY_WARNING = 2009 🔗

Повідомлення отримано від ОС при перевищенні його виділеної пам'яті.

Специфікація на платформу iOS.

NOTIFICATION_TRANSLATION_CHANGED = 2010 🔗

Повідомлення, отримане при зміні перекладу. Може бути запущений користувачем, що змінює локальне місце. Може використовуватися для відповіді на мовні зміни, наприклад, для зміни рядків UI на літа. Корисно при роботі з вбудованим перекладом, як Object.tr().

NOTIFICATION_WM_ABOUT = 2011 🔗

Повідомлення отримано від ОС при надсиланні запиту на "Про" інформацію.

Специфікація на платформу macOS.

NOTIFICATION_CRASH = 2012 🔗

Увімкнення отримано з аварійного керма Godot, коли двигун знаходиться на збій.

Реалізовано на настільних платформах, якщо увімкнено аварійний обробник.

NOTIFICATION_OS_IME_UPDATE = 2013 🔗

Сповіщення, отримане від ОС, коли відбувається оновлення механізму вводу (наприклад, зміна позиції курсора IME або рядка композиції).

Реалізовано на настільних та веб-платформах.

NOTIFICATION_APPLICATION_RESUMED = 2014 🔗

Повідомлення отримано від ОС при відновленні програми.

Специфіка для платформ Android та iOS.

NOTIFICATION_APPLICATION_PAUSED = 2015 🔗

Повідомлення, отримане від ОС, коли заявка призупинена.

Специфічні для платформ Android та iOS.

Примітка: На iOS, у вас є лише приблизно 5 секунд, щоб закінчити завдання, розпочате цей сигнал. Якщо ви переживаєте цей розподіл, iOS вб'є додаток, а не призупинити його.

NOTIFICATION_APPLICATION_FOCUS_IN = 2016 🔗

Повідомлення отримано від ОС, коли додаток зосереджено, тобто при зміні фокусу з робочого столу OS або додатку сторонніх до будь-якого відкритого вікна екземпляра Godot.

Реалізовано на настільних і мобільних платформах.

NOTIFICATION_APPLICATION_FOCUS_OUT = 2017 🔗

Повідомлення отримано від ОС при дефокусованій програмі, тобто при зміні фокусу з будь-якого відкритого вікна екземпляра Godot на робочий стіл або додатку сторонніх осіб.

Реалізовано на настільних і мобільних платформах.

NOTIFICATION_TEXT_SERVER_CHANGED = 2018 🔗

Повідомлення, отримано при зміні текстового сервера.

NOTIFICATION_APPLICATION_PIP_MODE_ENTERED = 2019 🔗

Notification received when the application enters picture-in-picture mode.

NOTIFICATION_APPLICATION_PIP_MODE_EXITED = 2020 🔗

Notification received when the application exits picture-in-picture mode.


Описи методів

void _finalize() virtual 🔗

Зателефонуйте до виходу програми.


void _initialize() virtual 🔗

Викликається після ініціалізації.


bool _physics_process(delta: float) virtual 🔗

Викликається кожний фізичний такт. delta — це логічний час між фізичними тактами в секундах, який дорівнює Engine.time_scale / Engine.physics_ticks_per_second. Еквівалентний Node._physics_process().

Якщо реалізовано, метод повинен повертати булеве значення. true завершує головний цикл, а false дозволяє йому перейти до наступного кроку.

Примітка: _physics_process() може бути викликаний до Engine.max_physics_steps_per_frame разів за (неактивний) кадр. Цей ліміт кроків може бути досягнутий, коли движок страждає від проблем з продуктивністю.

Примітка: Накопичений delta може відрізнятися від реальних секунд.


bool _process(delta: float) virtual 🔗

Викликається на кожному кадрі в режимі очікування, перед рендерингом і після обробки фізичних тиків. delta — це час між кадрами в секундах. Еквівалентно Node._process().

Якщо реалізовано, метод повинен повертати булеве значення. true завершує головний цикл, а false дозволяє йому перейти до наступного кадру.

Примітка: Коли движок працює з перебоями і частота кадрів знижується, delta збільшується. Коли delta збільшується, його максимальне значення обмежується Engine.time_scale * Engine.max_physics_steps_per_frame / Engine.physics_ticks_per_second. Як результат, накопичений delta може не відповідати реальному часу.

Примітка: Коли --fixed-fps увімкнено або движок працює в режимі Movie Maker (див. MovieWriter), процес delta завжди буде однаковим для кожного кадру, незалежно від того, скільки часу знадобилося для його рендерингу.

Примітка: Дельта кадру може бути оброблена OS.delta_smoothing, якщо це ввімкнено для проекту.