Hi everyone, I'm new to Godot and gamedev in general. Been lurking for a while and I've had many problems all of which I've been able to solve with determination (and searching the forums!) but I've hit upon the first problem I seemingly can't solve.
I have a cannon firing a ball.
The cannon is an Area2D as the main parent Node.
I have a CollisionShape2D, Sprite, Position2D (Muzzle) and Label all as separate children beneath.
Dragging with the RMB pressed rotates the cannon:
rotation_degrees += (event.relative.y / zoom)
if event.is_action_pressed("ui_accept"):
var new_ball = Ball.instance()
new_ball.position = $Muzzle.position
#generic velocity for now
new_ball.linear_velocity = Vector2(600,-800)
add_child(new_ball)
This works absolutely fine.

However the label (used to show the angle) rotates also.
If I make the Position2D a child of the sprite and change the code to rotate the sprite instead of the Area2D, when the Ball is fired it just stays in the same initial place the muzzle has before rotation.
$Sprite.rotation_degrees += (event.relative.y / zoom)
if event.is_action_pressed("ui_accept"):
var new_ball = Ball.instance()
new_ball.position = $Sprite/Muzzle.position
#generic velocity for now
new_ball.linear_velocity = Vector2(600,-800)
add_child(new_ball)

I thought it might be global_position instead but that spawns the ball somewhere off the bottom of the screen.
No idea what is going on. Any help would be great.