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...
Обробка запитів на вихід
Вихід
Більшість платформ мають можливість вимагати виходу з програми. На комп’ютерах це зазвичай робиться за допомогою значка «x» у рядку заголовка вікна. На мобільних пристроях програму можна закрити будь-коли, поки вона призупинена у фоновому режимі.
Обробка сповіщення
На настільних і веб-платформах Node отримує спеціальне сповіщення NOTIFICATION_WM_CLOSE_REQUEST, коли віконний менеджер запитує вихід.
Обробка сповіщення здійснюється наступним чином (на будь-якому вузлі):
func _notification(what):
if what == NOTIFICATION_WM_CLOSE_REQUEST:
get_tree().quit() # default behavior
public override void _Notification(int what)
{
if (what == NotificationWMCloseRequest)
{
GetTree().Quit(); // default behavior
}
}
Важливо зауважити, що за замовчуванням програми Godot мають вбудовану поведінку для виходу, коли надходить запит про вихід із диспетчера вікон. Це можна змінити, щоб користувач міг подбати про повну процедуру виходу:
get_tree().set_auto_accept_quit(false)
GetTree().AutoAcceptQuit = false;
На мобільних пристроях
На мобільних платформах немає прямого еквівалента NOTIFICATION_WM_CLOSE_REQUEST. Через особливості мобільних операційних систем єдине місце, де ви можете запустити код перед виходом, це коли програма призупинена у фоновому режимі. Як на Android, так і на iOS програма може бути закрита під час призупинення в будь-який час користувачем або ОС. Спосіб заздалегідь спланувати цю можливість – скористатися NOTIFICATION_APPLICATION_PAUSED для виконання будь-яких необхідних дій під час призупинення програми.
Примітка
На iOS у вас є лише приблизно 5 секунд, щоб завершити завдання, розпочате цим сигналом. Якщо ви перевищите цей розподіл, iOS припинить роботу програми, а не призупинить її.
На Android натискання кнопки «Назад» призведе до виходу з програми, якщо Програма > Конфігурація > Вийти після повернення в налаштуваннях проекту (це стандартно). Це запустить NOTIFICATION_WM_GO_BACK_REQUEST.
Надсилання власного сповіщення про вихід
Хоча примусове закриття програми можна зробити викликом SceneTree.quit, це не надсилатиме NOTIFICATION_WM_CLOSE_REQUEST до вузлів у дереві сцени. Вихід за допомогою виклику SceneTree.quit не дозволить завершити спеціальні дії (наприклад, збереження, підтвердження виходу або налагодження), навіть якщо ви спробуєте затримати рядок, який примусово завершує роботу.
Натомість, якщо ви хочете повідомити вузли в дереві сцени про майбутнє завершення програми, ви повинні надіслати сповіщення самостійно:
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
GetTree().Root.PropagateNotification((int)NotificationWMCloseRequest);
Надсилання цього сповіщення повідомить усі вузли про завершення програми, але не припинить саму програму на відміну від 3.X. Щоб досягти попередньої поведінки, SceneTree.quit слід викликати після сповіщення.