0 votes

Hello I am working on a pong game in godot. Everything is going well so far but I recieve this error in my debugger: E 0:01:55.112 body_set_shape_as_one_way_collision: Can't change this state while flushing queries. Use call_deferred() or set_deferred() to change monitoring state instead. <C++ Error> Condition "body->get_space() && flushing_queries" is true. <C++ Source> servers/physics_2d/physics_2d_server_sw.cpp:739 @ body_set_shape_as_one_way_collision() AddBall.gd:18 @ _on_Area2D_body_entered()

here is my code for instancing a duplicate ball:

extends Node2D

var collect = false
var ballscene = null

func _ready():

func _on_Area2D_body_entered(body):
    if body.name=="Ball"&&collect==false:
        collect = true
        var ball =  load("res://Scenes/BallDuplicate.tscn")
        ballscene = ball.instance()

yes I instance the ball in the power up and not my spawn manager.

Godot version 3.2.3
in Engine by (30 points)

1 Answer

0 votes

Thats just a thing with physics server, it is often busy with querries and will have troubles doing some operations at the moment of collisions. You should get used to calling deferred, just as this error suggests. So instead of addchild(ballscene) You will need to calldeferred("add_child",ballscene).

by (1,110 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.