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("Initialized:")
print(" Starting time: %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("Finalized:")
print(" End time: %s" % str(time_elapsed))
using Godot;
[GlobalClass]
public partial class CustomMainLoop : MainLoop
{
private double _timeElapsed = 0;
public override void _Initialize()
{
GD.Print("Initialized:");
GD.Print($" Starting Time: {_timeElapsed}");
}
public override bool _Process(double delta)
{
_timeElapsed += delta;
// Верните true, чтобы завершить основной цикл..
return Input.GetMouseButtonMask() != 0 || Input.IsKeyPressed(Key.Escape);
}
private void _Finalize()
{
GD.Print("Finalized:");
GD.Print($" End Time: {_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 🔗
Уведомление получено, когда переводы могли измениться. Может быть вызвано изменением пользователем локали. Может использоваться для реагирования на изменения языка, например, для изменения строк пользовательского интерфейса на лету. Полезно при работе со встроенной поддержкой перевода, например 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 🔗
Уведомление, полученное от ОС, когда приложение находится в фокусе, т. е. при изменении фокуса с рабочего стола ОС или стороннего приложения на любое открытое окно экземпляра 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, если эта функция включена в проекте.