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.
Checking the stable version of the documentation...
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))
using Godot;
[Global class]
public partial class CustomMainLoop : MainLoop
{
private double _timeElapsed = 0;
public override void _Initialize()
{
GD.Print("Ініціалізовано:");
GD.Print($" Час початку: {_timeElapsed}");
}
public override bool _Process(double delta)
{
_timeElapsed += delta;
// Повертає true для завершення основного циклу.
return Input.GetMouseButtonMask() != 0 || Input.IsKeyPressed(Key.Escape);
}
private void _Finalize()
{
GD.Print("Завершено:");
GD.Print($" Час завершення: {_timeElapsed}");
}
}
Методи
void |
_finalize() virtual |
void |
_initialize() virtual |
_physics_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, якщо це ввімкнено для проекту.