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