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...
Tratamento de solicitações de saída
Saindo do jogo (Quitting)
A maioria das plataformas tem a opção de solicitar o encerramento do aplicativo. Em desktops, isso geralmente é feito com o ícone "x" na barra de título da janela. Em dispositivos móveis, o aplicativo pode ser encerrado a qualquer momento enquanto estiver suspenso em segundo plano.
Lidando com notificação
Nas plataformas desktop e web, o Node recebe uma notificação especial NOTIFICATION_WM_CLOSE_REQUEST quando o encerramento é solicitado pelo gerenciador de janelas.
Lidar com a notificação é feito da seguinte forma (em qualquer nó):
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
}
}
É importante notar que, por padrão, os aplicativos Godot têm o comportamento integrado de encerrar quando o encerramento é solicitado pelo gerenciador de janelas. Isso pode ser alterado para que o usuário possa cuidar de todo o procedimento de encerramento:
get_tree().set_auto_accept_quit(false)
GetTree().AutoAcceptQuit = false;
Em dispositivos móveis
Não há equivalente direto a NOTIFICATION_WM_CLOSE_REQUEST em plataformas móveis. Devido à natureza dos sistemas operacionais móveis, o único lugar onde você pode executar código antes do encerramento é quando o aplicativo está sendo suspenso em segundo plano. Tanto no Android quanto no iOS, o aplicativo pode ser finalizado enquanto suspenso a qualquer momento, seja pelo usuário ou pelo sistema operacional. Uma maneira de planejar essa possibilidade é utilizar NOTIFICATION_APPLICATION_PAUSED para realizar as ações necessárias enquanto o aplicativo está sendo suspenso.
Nota
No iOS, você tem apenas aproximadamente 5 segundos para concluir uma tarefa iniciada por esse sinal. Se você ultrapassar essa cota, o iOS finalizará o aplicativo em vez de pausá-lo.
No Android, pressionar o botão Voltar sairá do aplicativo se Application > Config > Quit On Go Back estiver marcado nas Configurações do Projeto (que é o padrão). Isso disparará NOTIFICATION_WM_GO_BACK_REQUEST.
Enviando sua própria notificação de encerramento
Embora forçar o fechamento do aplicativo possa ser feito chamando SceneTree.quit, fazer isso não enviará a notificação NOTIFICATION_WM_CLOSE_REQUEST para os nós na árvore de cenas. Encerrar chamando SceneTree.quit não permitirá que ações personalizadas sejam concluídas (como salvar, confirmar a saída ou depurar), mesmo se você tentar atrasar a linha que força a saída.
Em vez disso, se você quiser notificar os nós na árvore de cenas sobre o encerramento iminente do programa, você deve enviar a notificação por conta própria:
get_tree().root.propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
GetTree().Root.PropagateNotification((int)NotificationWMCloseRequest);
Enviar esta notificação informará todos os nós sobre o encerramento do programa, mas não encerrará o programa em si, ao contrário do que ocorria na versão 3.X. Para alcançar o comportamento anterior, SceneTree.quit deve ser chamado após a notificação.