So I have been trying this out and it is not working! I cannot get the material of the particle to match the icon I am moving which is peculiar and is not what I was expecting.
So the only answer is to do it manually and not use particles.
Oh forget that I just found the answer.
Thanks to this post:
And @EX74
Now that works perfectly. If you need more details give me a shout.
PS It should definitely not be moving with your parent as well, as particles are independently being created. The only way this might happen is if you have some strange system of canvas layers which you are moving and not just moving the player itself. (My best guess anyway).
PS This is all I was using to get a rotating icon moving accross the screen with a trail of particles.
extends Node2D
@onready var icon: Sprite2D = $Icon
@onready var cpu_particles_2d: CPUParticles2D = $Icon/CPUParticles2D
func _process(delta: float) -> void:
icon.position.x += 200 * delta
icon.position.x += 75 * delta
icon.rotation += delta * 0.1
PS Personally though, if I was doing this myself for real, I would not use particles, I would use a pool of trail sprites that I could position and fade out under perfect individual control via code.


