Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Processamento Ocioso e Físico

Games run in a loop. Each frame, you need to update the state of your game world before drawing it on screen. Godot provides two virtual methods in the Node class to do so: Node._process() and Node._physics_process(). If you define either or both in a script, the engine will call them automatically.

Há dois tipos de processamento disponíveis para você:

  1. O processamento ocioso permite que você execute o código que atualiza um nó a cada quadro, com a maior frequência possível.

  2. O processamento físico ocorre a uma taxa fixa, 60 vezes por segundo por padrão. Isso é independente da taxa de quadros real do seu jogo e mantém a física funcionando sem problemas. Você deve usá-lo para qualquer coisa que envolva o motor de física, como mover um corpo que colide com o ambiente.

Você pode ativar o processamento ocioso definindo o método _process() em um script. Você pode desativá-lo e ativá-lo novamente chamando Node.set_process().

O motor chama este método toda vez que ele desenha um quadro:

func _process(delta):
    # Do something...
    pass

Tenha em mente que a frequência com que o motor chama _process() depende da taxa de quadros do seu aplicativo, que varia com o tempo e entre os dispositivos.

O parâmetro delta da função é o tempo decorrido em segundos desde a chamada anterior para _process(). Use este parâmetro para fazer cálculos independentes da taxa de quadros. Por exemplo, você deve sempre multiplicar um valor de velocidade por delta para animar um objeto em movimento.

O processamento de física funciona com uma função virtual semelhante: _physics_process(). Use-o para cálculos que devem acontecer antes de cada etapa da física, como mover um personagem que colide com o mundo do jogo. Como mencionado acima, _physics_process() executa em intervalos de tempo fixos tanto quanto possível para manter as interações físicas estáveis. Você pode alterar o intervalo entre as etapas de física nas configurações do projeto, em Physics -> Common -> Physics Fps. Por padrão, ele está configurado para ser executado 60 vezes por segundo.

The engine calls this method before every physics step:

func _physics_process(delta):
    # Do something...
    pass

A função _process() não é sincronizada com a física. Sua taxa de quadros não é constante e depende do hardware e da otimização do jogo. Sua execução é feita depois do passo da física em jogos de single-thread.

Você pode ver a função _process() em ação criando uma cena com um único nó Label, com o seguinte script anexado a ele:

extends Label

var time = 0

func _process(delta):
    time += delta
    text = str(time) # 'text' is a built-in Label property.

Ao executar a cena, você deverá ver um contador aumentando cada quadro.