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 або рядка композицій).
Специфікація на платформу macOS.
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 🔗
Повідомлення, отримано при зміні текстового сервера.
Описи методів
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, якщо це ввімкнено для проекту.