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.

Idle і Physics Processing

Ігри виконуються циклічно. Для кожного кадру вам потрібно оновити стан свого ігрового світу, перш ніж відобразити його на екрані. Для цього Godot надає два віртуальні методи в класі Node: Node._process() і Node._physics_process(). Якщо ви визначите один або обидва в сценарії, механізм викличе їх автоматично.

Вам доступні два види обробки:

  1. Неактивна обробка дозволяє запускати код, який оновлює вузол кожного кадру якомога частіше.

  2. Фізична обробка відбувається з фіксованою швидкістю, 60 разів на секунду за умовчанням. Це не залежить від фактичної частоти кадрів вашої гри та забезпечує безперебійну роботу фізики. Ви повинні використовувати його для всього, що стосується фізичного механізму, як-от переміщення тіла, яке стикається з навколишнім середовищем.

Ви можете активувати неактивну обробку, визначивши метод _process() у сценарії. Ви можете вимкнути та знову ввімкнути його, викликавши Node.set_process().

Двигун викликає цей метод кожного разу, коли малює кадр:

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

Майте на увазі, що частота, з якою механізм викликає _process(), залежить від частоти кадрів вашої програми, яка змінюється з часом і на різних пристроях.

Параметр delta функції - це час, що минув у секундах з моменту попереднього виклику _process(). Використовуйте цей параметр, щоб робити обчислення незалежно від частоти кадрів. Наприклад, ви завжди повинні помножити значення швидкості на дельту, щоб анімувати рухомий об'єкт.

Обробка фізичних даних працює за допомогою подібної віртуальної функції: _physics_process(). Використовуйте його для обчислень, які мають виконуватися перед кожним кроком фізики, як-от переміщення персонажа, який стикається зі світом гри. Як згадувалося вище, _physics_process() виконується з фіксованими інтервалами часу, наскільки це можливо, щоб підтримувати фізичні взаємодії стабільними. Ви можете змінити інтервал між кроками фізики в налаштуваннях проекту в розділі Фізика -> Загальні -> Фізика Fps. За замовчуванням він налаштований на виконання 60 разів на секунду.

Двигун викликає цей метод перед кожним кроком фізики:

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

Функція _process() не синхронізована з фізикою. Його швидкість залежить від апаратного забезпечення та оптимізації гри. Він також запускається після етапу фізики в однопоточних іграх.

Ви можете спостерігати за роботою функції _process(), створивши сцену з одним вузлом Label, до якого додається наступний скрипт:

extends Label

var time = 0

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

Коли ви запускаєте сцену, ви повинні побачити лічильник, що збільшує кожен кадр.