To avoid some lag during the game, it is preferable to create bullets upon scene loading. During the game, bullets are never created or deleted, they just change from an active to an inactive state.

SpawnPoint nodes have a pool_amount property, fill it with how many bullets you think are gonna be on screen at the same time after being spawned by this spawner. You don’t have to be precise so it’s better to choose a bit too much than not enough.

If you spawn bullets by code via the spawn() function, call the create_pool() function before when the scene loads to create a pool manually. More on that in API : Special Functions & Signals