ошибка с созданием экземпляра мяча в моей игре в понг в годо

#game-development #godot

Вопрос:

Здравствуйте, я работаю над игрой в понг в годо. Пока все идет хорошо, но я получаю эту ошибку в своем отладчике:

E 0:01:55.112 body_set_shape_as_one_way_collision: Не удается изменить это состояние при сбросе запросов. Вместо этого используйте call_deferred() или set_deferred() для изменения состояния мониторинга.

<Ошибка C > Условие «тело-<Ошибка C >>get_space() amp;amp; flushing_queries» верно.

<Источник C > серверы/physics_2d/physics_2d_server_sw.cpp:739 @ body_set_shape_as_one_way_collision()

AddBall.gd:18 @ _on_Area2D_body_entered()

Вот мой код для создания дубликата шара:

 extends Node2D

var collect = false
var ballscene = null

func _ready():
    $Area2D/AnimatedSprite.play("Spin")

func _on_Area2D_body_entered(body):
    #print(body.name)
    if body.name=="Ball"amp;amp;collect==false:
        collect = true
        $Collection.play()
        $AnimationPlayer.play("Fade")
        $Area2D/AnimatedSprite.stop()
        var ball =  load("res://Scenes/BallDuplicate.tscn")
        ballscene = ball.instance()
        find_parent("SpawnManager").get_node("BallDuplicate").add_child(ballscene)
        queue_free()
        
 

Да, я включаю мяч в питание, а не мой менеджер по спавну.

Ответ №1:

Как рекомендуется в сообщении об ошибке, вам следует отложить изменения дерева узлов call_deffered() , так как вам не разрешается добавлять другие твердые тела в сцену во время обработки столкновений.

 extends Node2D

var collect = false
var ballscene = null

func CollectFunc():
    if not collect:
        collect = true
        $Collection.play()
        $AnimationPlayer.play("Fade")
        $Area2D/AnimatedSprite.stop()
        var ball =  load("res://Scenes/BallDuplicate.tscn")
        ballscene = ball.instance()
        find_parent("SpawnManager").get_node("BallDuplicate").add_child(ballscene)
        queue_free()

func _ready():
    $Area2D/AnimatedSprite.play("Spin")

func _on_Area2D_body_entered(body):
    #print(body.name)
    if body.name=="Ball":
        call_deffered("CollectFunc")