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.

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

É 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)

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)

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.