Game development 在戈多我的乒乓球游戏中实例化一个球时出错

Game development 在戈多我的乒乓球游戏中实例化一个球时出错,game-development,godot,Game Development,Godot,你好,我正在戈多做一个乒乓球游戏。到目前为止,一切进展顺利,但我在调试器中遇到以下错误: E 0:01:55.112主体\设置\形状\为\单向\碰撞:刷新查询时无法更改此状态。使用call_deferred()或set_deferred()来更改监视状态 条件“body->get_space()&&flush_querys”为true servers/physics\u 2d/physics\u 2d\u server\u sw.cpp:739@body\u set\u shape\u as\u

你好,我正在戈多做一个乒乓球游戏。到目前为止,一切进展顺利,但我在调试器中遇到以下错误:

E 0:01:55.112主体\设置\形状\为\单向\碰撞:刷新查询时无法更改此状态。使用call_deferred()或set_deferred()来更改监视状态

条件“body->get_space()&&flush_querys”为true

servers/physics\u 2d/physics\u 2d\u server\u sw.cpp:739@body\u set\u shape\u as\u one\u way\u 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"&&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()
        

是的,我在加电中引用了球,而不是我的spawn manager。

正如错误消息所建议的那样,您应该使用
调用_defered()
延迟节点树更改,因为在碰撞处理过程中,不允许在场景中添加其他刚体

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

谢谢你,这真是奇迹