Have you tried preload
instead of load
so that the scene is loaded at the start. For my gore system I preload a gore scene which is a RigidBody2D with a script and other nodes attached. Then I spawn between 40 and 120 instantly when my character loses a life or dies. It seems to work fine. So something like:
var goreNode = preload("res://character/gore.tscn")
func spawnGore(amount):
#spawn gore
for i in range(amount):
var gore = goreNode.instance()
gore.setPos(get_global_pos()+Vector2(randf()*6-3,randf()*6-3))
objects.add_child(gore)
Decided to run a test and added "spawnGore(1)" into _fixed_process
and it only began dropping frames after it reached about 2000 objects. But it should be a lot better for Area2D
nodes. Made a low res gif of the results here.