Годо 3.2.1. Невозможно изменить это состояние при очистке запросов. Вместо этого используйте call_deferred () или set_deferred (), чтобы изменить состояние мониторинга - PullRequest
1 голос
/ 01 августа 2020

В моей 2D-игре у игрока есть возможность уничтожать ящики, объекты с двумя формами столкновения. При уничтожении ящики создают предметы, которые также имеют форму столкновения. Но когда следующая функция вызывает много похожих ошибок, отображается в консоли Godot

Код:

func _on_Crate_item_dropped(collectible, pos):
    collectible.init(pos, Vector2(rand_range(30, 100), rand_range(-10, 10)))
    $CollectibleContainer.add_child(collectible)  # error occurs here

Ошибка:

ERROR: Can't change this state while flushing queries. Use call_deferred() or set_deferred() to change monitoring state instead.

1 Ответ

1 голос
/ 01 августа 2020

Метод call_deferred() вызывает метод объекта во время простоя. Его первый параметр - это строка имени метода, а другие параметры - это параметры метода.

Замените

$CollectibleContainer.add_child(collectible)

на

$CollectibleContainer.call_deferred("add_child", collectible)
...